/*
 * FechaMayorOtroCampoDep.java
 *
 * Created on 29 de mayo de 2007, 10:39 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.ValidarMovilidadMC.ENTIDADES_HOMOLOGADA;
import com.fidufosyga.rules.util.ObtenerDiasEntreFechas;
import java.text.SimpleDateFormat;
import java.util.Date;

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 ValidacionMovilidadMS extends AbstractRule {

    // COL?1=?2 AND dbo.FU_COMPARAR_FECHAS(@campo, ?3)=1
    String DATE_FORMAT = "dd/MM/yyyy";

    SimpleDateFormat sdf;

    //Create object of SimpleDateFormat and pass the desired date format
    /**
     * Creates a new instance of CampoVacio
     */
    public ValidacionMovilidadMS() {
        sdf = new SimpleDateFormat(DATE_FORMAT);
        sdf.setLenient(false);
    }

    public boolean performValidation(String field, String registro[],
            String nombreArchivo) {

        String fechaOtra = (String) getParams()[1];
        String fechaAfiliacion = registro[12];
        String entidad = registro[0];
        
        if (!ValidarFecha.esFecha(field) || !ValidarFecha.esFecha(fechaOtra)) {
            return false;
        }
        Date dateCampo = null;
        Date dateOtra = null;
        Date dateAfiliacion = null;
        try {
            dateCampo = sdf.parse(field);
            dateOtra = sdf.parse(fechaOtra);
            dateAfiliacion = sdf.parse(fechaAfiliacion);

        } catch (Exception e) {
            return false;
        }

        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
                        + "entidadesSubsidiadoHomologada.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(dateCampo,
                dateMaxima);

        long annos = (long) Math.floor(edadDias / 365.25);

        if (((Properties) Context.getContext().getAttribute(ENTIDADES_HOMOLOGADA))
                .getProperty(entidad) != null) {

            if (annos < 1) {
                if (dateOtra.before(dateAfiliacion)) {
                    return false;
                } else {
                    return true;
                }
            }
            return true;
        }
        return false;
    }

}
