/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * 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;

/**
 *
 * @author Marinela.Quintero
 */
public class ValidarPaises extends AbstractRule {
    public static final String PAISES = "PAISES";
    private boolean validacionCompletada = false;

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

        // Obtener los parámetros para cortar el nombre del archivo
        int inicio = Integer.parseInt((String) getParams()[0]);
        int longitud = Integer.parseInt((String) getParams()[1]);
        String cadena = nombreArchivo.substring(inicio - 1, inicio - 1 + longitud);

        // Cargar archivo de países si aún no está cargado
        if (Context.getContext().getAttribute(PAISES) == null) {
            Properties defaultProps = new Properties();
            try (FileInputStream in = new FileInputStream(
                    System.getProperty("user.dir") + File.separator + "Paises" + File.separator + "Paises.properties")) {
                defaultProps.load(in);
                Context.getContext().addAttribute(PAISES, defaultProps);
            } catch (IOException e) {
                return false;
            }
        }

        Properties paises = (Properties) Context.getContext().getAttribute(PAISES);

        // Lógica si el archivo contiene "MSPS01"
        if ("MSPS01".equals(cadena)) {
            validacionCompletada = true;
             if (field.trim().isEmpty()) {            
                return false; // Es válido aunque esté vacío
            } else if (paises.getProperty(field) != null) {
                return false; // Es válido si está en el listado
            } else {
               return true; // No está en el listado → error
            }
        } else {
            // Si NO es MSPS01: el campo NO puede estar vacío y debe estar en el listado
            if (field.isEmpty()) {
                validacionCompletada = false;
                return true; // Error: no se permite vacío
            } else if (paises.getProperty(field) != null) {
                validacionCompletada = true;
                return false; // Válido
            } else {
                validacionCompletada = false;
                return true; // No está en el listado → error
            }
        }
    }
}

