/*
 * ValidarDiscapacidad.java
 *
 * Created on 4 de abril de 2007, 11:47 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package com.fidufosyga.rules;

import com.fidufosyga.context.Context;
import static com.fidufosyga.rules.ValidarEntidadesContributivoHomologadaTraslados.ENTIDADES_HOMOLOGADA;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.fidufosyga.rules.util.ObtenerDiasEntreFechas;
import com.fidufosyga.rules.util.ValidarFecha;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Calendar;
import java.util.Properties;

/**
 *
 * @author Jsolano
 */
public class ValidarMovilidadMC extends AbstractRule {

    public static final String ENTIDADES_HOMOLOGADA = "ENTIDADES_CONTRIBUTIVO_HOMOLOGADA";
    String DATE_FORMAT = "dd/MM/yyyy";

    SimpleDateFormat sdf;

    /**
     * Creates a new instance of CampoLlenoParaUnValorDiferenteDeOtroCampo
     */
    public ValidarMovilidadMC() {
        sdf = new SimpleDateFormat(DATE_FORMAT);
        sdf.setLenient(false);
    }

    // 9,'B',12,'2',13
    // 19,B,23,13,24
    // 20,B,23,14,24
    public boolean performValidation(String fechaNacimiento, String registro[],
            String nombreArchivo) {

        String fechaFormulario = registro[new Integer((String) getParams()[4])
                .intValue()];
        String fechaMaxima = (String) getParams()[5];
   

        String columnaTipoAfiliado = registro[new Integer(
                (String) getParams()[1]).intValue()];
        String columnaParentesco = registro[new Integer((String) getParams()[3])
                .intValue()];
        String tipoAfiliado = (String) getParams()[0];
        String parentesco = (String) getParams()[2];

        String entidad = registro[0];

        if (!ValidarFecha.esFecha(fechaNacimiento)) {
            return false;
        }

        Date dtFechaNacimiento;
        Date dtFechaMaxima;

        try {
            dtFechaNacimiento = sdf.parse(fechaNacimiento);
            dtFechaMaxima = sdf.parse(fechaMaxima);

        } catch (Exception e) {
            return false;
        }

        if (!ValidarFecha.esFecha(fechaFormulario)) {
            return false;
        }

        Date dtFechaFormulario;

        try {
            dtFechaFormulario = sdf.parse(fechaFormulario);
        } catch (Exception e) {
            return false;
        }

        //Entidades Contributivo Homologadas
        if (Context.getContext().getAttribute(ENTIDADES_HOMOLOGADA) == null) {
            Properties defaultProps = new Properties();
            FileInputStream in;

            try {

                in = new FileInputStream(System.getProperty("user.dir")
                        + File.separator + "entidades" + File.separator
                        + "entidadesContributivoHomologada.properties");
                defaultProps.load(in);
                in.close();
                Context.getContext().addAttribute(ENTIDADES_HOMOLOGADA, defaultProps);

            } catch (FileNotFoundException e) {

                return false;
            } catch (IOException e) {

                return false;

            }

        }
        Date dateMaxima = Calendar.getInstance().getTime();
        // long edadDias = ObtenerDiasEntreFechas.calcular(dtFechaNacimiento,
        // Calendar.getInstance().getTime());
        long edadDias = ObtenerDiasEntreFechas.calcular(dtFechaNacimiento,
                dateMaxima);
        ;
        long annos = (long) Math.floor(edadDias / 365.25);

        //Validación
        
        
        if (((Properties) Context.getContext().getAttribute(ENTIDADES_HOMOLOGADA))
                .getProperty(entidad) != null) {

            if (columnaTipoAfiliado.equals(tipoAfiliado)) {
                if (annos < 1) {
                    if (dtFechaMaxima.before(dtFechaFormulario)) {
                        return false;
                    } else {
                        return true;
                    }
                }

            }

        } else {
            return false;
        }
        return true;
    }

}
