/**package com.fidufosyga.rules;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import com.fidufosyga.context.Context;

public class ValidarDivipola extends AbstractRule {
    public static final String DIVIPOLA = "DIVIPOLA";
    private boolean validacionCompletada = false;

    @Override
    public boolean performValidation(String field, String[] registro, String nombreArchivo) {
        validacionCompletada = false;

        // Obtener parámetros
        String VALOR1 = (String) getParams()[0]; // posición nacionalidad
        String VALOR2 = (String) getParams()[1]; // código país

        // Leer nacionalidad del registro (aunque no se usa directamente)
        String nacionalidad = registro[Integer.parseInt(VALOR1)];

        // Obtener la cadena del nombre del archivo para detectar "MSPS01"
        int valor1 = Integer.parseInt((String) getParams()[2]);
        int valor2 = Integer.parseInt((String) getParams()[3]);
        String cadena = nombreArchivo.substring(valor1 - 1, valor1 + valor2 - 1);
        boolean esMSPS01 = "MSPS01".equals(cadena);

        boolean esColombia = "COL".equalsIgnoreCase(VALOR2);
        boolean valor2Vacio = VALOR2 == null || VALOR2.trim().isEmpty();
        boolean fieldVacio = field == null || field.trim().isEmpty();

        // Si el archivo es MSPS01 y VALOR2 está vacío → solo se permite field vacío
        if (esMSPS01 && valor2Vacio) {
            if (fieldVacio) {
                validacionCompletada = true;
                return false; // ✅ válido
            } else {
                return true; // ❌ glosa: no se permite valor si VALOR2 está vacío
            }
        }

        // Cargar DIVIPOLA si no está en contexto
        if (Context.getContext().getAttribute(DIVIPOLA) == null) {
            try (FileInputStream in = new FileInputStream(System.getProperty("user.dir")
                    + File.separator + "Municipios" + File.separator + "Divipola.properties")) {
                Properties divipolaProps = new Properties();
                divipolaProps.load(in);
                Context.getContext().addAttribute(DIVIPOLA, divipolaProps);
            } catch (IOException e) {
                return true; // ❌ glosa por error de carga
            }
        }

        Properties divipola = (Properties) Context.getContext().getAttribute(DIVIPOLA);

        if (esColombia) {
            // Si es COL → field obligatorio y debe estar en DIVIPOLA
            if (fieldVacio) {
                return true; // ❌ glosa: campo vacío no permitido
            } else if (divipola.getProperty(field) != null) {
                validacionCompletada = true;
                return false; // ✅ válido
            } else {
                return true; // ❌ glosa: valor no está en DIVIPOLA
            }
        } else {
            // Si NO es COL → field debe estar vacío
            if (fieldVacio) {
                validacionCompletada = true;
                return false; // ✅ válido
            } else {
                return true; // ❌ glosa: no se permite valor si no es COL
            }
        }
    }
}
**/
/*
 * ValidarEntidades.java
 *
 * Created on 25 de marzo de 2007, 03:44 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package com.fidufosyga.rules;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import com.fidufosyga.context.Context;
import static com.fidufosyga.rules.ValidarDivipola.DIVIPOLA;

public class ValidarDivipola extends AbstractRule {
    public static final String DIVIPOLA = "DIVIPOLA";

    public boolean performValidation(String field, String registro[], String nombreArchivo) {
        // Parametrización
        String VALOR1 = (String) getParams()[0];
        String VALOR2 = (String) getParams()[1];

        String nacionalidad = registro[Integer.parseInt(VALOR1)];
        Integer valor1 = Integer.parseInt((String) getParams()[2]);
        Integer valor2 = Integer.parseInt((String) getParams()[3]);

        String cadena = nombreArchivo.substring(valor1 - 1, valor1 + valor2 - 1);

        // Cargar archivo de DIVIPOLA si no está cargado aún
        if (Context.getContext().getAttribute(DIVIPOLA) == null) {
            Properties defaultProps = new Properties();
             
            try {
                FileInputStream in = new FileInputStream(System.getProperty("user.dir")
                        + File.separator + "Municipios" + File.separator
                        + "Divipola.properties");
                defaultProps.load(in);
                in.close();
                Context.getContext().addAttribute(DIVIPOLA, defaultProps);
            } catch (IOException e) {
                return false; // Error al cargar archivo → se glosa
            }
        }

        Properties divipolaProps = (Properties) Context.getContext().getAttribute(DIVIPOLA);

        // Validación cuando cadena ≠ MSPS01
        if (!"MSPS01".equals(cadena)) {
            if ("COL".equalsIgnoreCase(nacionalidad)) {
                if (field.trim().isEmpty()) {
                    return true; // glosa porque se espera valor obligatorio
                }
                // Se espera que el campo esté en el archivo Divipola
                if (divipolaProps.getProperty(field.trim()) == null) {
                    return true; // glosa porque no está en DIVIPOLA
                } else {
                    return false; // válido
                }
            } else {
                // Si no es COL, campo debe estar vacío
                return !field.trim().isEmpty(); // glosa si tiene contenido
            }
        }

        // Si la cadena es "MSPS01", entramos en otras validaciones específicas
        if ("MSPS01".equals(cadena)) {
            if (nacionalidad.trim().isEmpty() && field.trim().isEmpty()) {
                return false; // Si tanto nacionalidad como field están vacíos
            }

                     
          if ("COL".equalsIgnoreCase(nacionalidad)) {
    // Si la nacionalidad es "COL", el campo puede estar vacío o debe estar en DIVIPOLA
             if (field.trim().isEmpty()) {
                return false; // Campo vacío permitido
                } else if (divipolaProps.getProperty(field.trim()) != null) {
                    return false; // Valor válido en DIVIPOLA
            } else {
            return true; // Valor no está en DIVIPOLA
            }
        } else {
            // Si la nacionalidad NO es "COL", el campo debe estar vacío
            if (field.trim().isEmpty()) {
                return false; // Campo vacío permitido
            } else {
                return true; // Campo con valor no permitido
            }
        }
           
           
        }

        return false; // Si no se cumple ninguna condición, se glosa
    }
}
