/*
 * TiposDocumentoVSEdadDependiente.java
 *
 * Created on 24 de marzo de 2007, 05:16 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package com.fidufosyga.rules;

import com.fidufosyga.rules.util.EdadMayorAUnaFecha;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.fidufosyga.rules.util.ObtenerDiasEntreFechas;
import com.fidufosyga.rules.util.ValidarFecha;

// "9,N01,11,12"
/**
 *
 * @author jlozanop
 */
public class TiposDocumentoMSVSEdadDependienteASMS extends AbstractRule {

    String DATE_FORMAT = "dd/MM/yyyy";

    SimpleDateFormat sdf;

    Date fechaActual;

    public TiposDocumentoMSVSEdadDependienteASMS() {
        sdf = new SimpleDateFormat(DATE_FORMAT);
        sdf.setLenient(false);
        fechaActual = Calendar.getInstance().getTime();
    }

    public boolean performValidation(String field, String registro[],
            String nombreArchivo) {
        String codigoNovedad = registro[new Integer((String) getParams()[0])
                .intValue()];
        Date fechaNacimiento = null;
        if (!ValidarFecha.esFecha(field)) {
            return false;
        }
        if (codigoNovedad.equals((String) getParams()[1])) {
            try {
                fechaNacimiento = sdf.parse(field);
            } catch (Exception e) {
                return false;
            }
            String tipoDoc = registro[new Integer((String) getParams()[2])
                    .intValue()];

            //trae el tipo doc de la novedad
                        String campoTipoDoc = (String) (getParams()[4]);
                       int tipoDocN = Integer.parseInt(campoTipoDoc);
                       String TipoDocNov = registro[tipoDocN];
                       
            if (tipoDoc.equals("MS")) {
                // NoCoincideExpresionRegularsegunOtroCampo
                // 2,MS,^([0-9]{5}[AID]{1}[A-Z0-9]{4})|([0-9]{4#12})$
                Object[] params = new Object[3];
                params[0] = getParams()[2];
                params[1] = tipoDoc;
                params[2] = "^[0-9]{5}[AIDP]{1}[0-9]{4}$";
                String fieldRegla = registro[new Integer(
                        (String) getParams()[3]).intValue()];
                NoCoincideExpresionRegularsegunOtroCampo regla = new NoCoincideExpresionRegularsegunOtroCampo();
                regla.setParams(params);
                boolean retorno = regla.performValidation(fieldRegla, registro,
                        nombreArchivo);
                if (retorno == false) {
                    long dias = ObtenerDiasEntreFechas.calcular(
                            fechaNacimiento, fechaActual);
                    if (dias > 6480) {
                        return true;
                    }
                }
            }
            //Validación N01 CE --> MAYOR DE 7 AÑOS
            if (tipoDoc.equals("CE")) {

                long dias = ObtenerDiasEntreFechas.calcular(
                        fechaNacimiento, fechaActual);
                if ((dias <= 2556) && !TipoDocNov.equals("AS") && !TipoDocNov.equals("MS")) {//Ticket #8261 21122023
                                        return true;
                                    }
                if ( TipoDocNov.equals("AS") && TipoDocNov.equals("MS")) {//Ticket #8261 21122023
                                        return false;
                                    }
                // else {
                  //  return false;
                //}
            }
            //Validación N01 PA --> MENOR DE 7 AÑOS
            if (tipoDoc.equals("PA")) {

                long dias = ObtenerDiasEntreFechas.calcular(
                        fechaNacimiento, fechaActual);
                if ((dias > 2921) && !TipoDocNov.equals("AS") && !TipoDocNov.equals("MS")) {//Ticket #8261 21122023
                    return true;
                    }
                if ( TipoDocNov.equals("AS") && TipoDocNov.equals("MS")) {//Ticket #8261 21122023
                    return false;
                    }
                 //else {
                   // return false;
                }
            }
        
        return false;
    }
}

