/*
 * 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 TiposDocumentoEdadDependienteSubs extends AbstractRule {

    String DATE_FORMAT = "dd/MM/yyyy";

    SimpleDateFormat sdf;

    Date fechaActual;

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

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

            
        //Ticket #8261 21122023    

    // Obtener el tipo de población
     String campo = (String) (getParams()[1]);
        int campoDep = Integer.parseInt(campo);
        String TipoPob = registro[campoDep];
    
//String TipoPob = registro[13];

    // Validar tipo de población 
    boolean campo13Valido = TipoPob.equals("1") || TipoPob.equals("2") || TipoPob.equals("6") || TipoPob.equals("8") || TipoPob.equals("9") || TipoPob.equals("10") ||
     TipoPob.equals("14") || TipoPob.equals("16") || TipoPob.equals("17") || TipoPob.equals("18") || TipoPob.equals("22") || TipoPob.equals("24")  || TipoPob.equals("25")  ||  
     TipoPob.equals("29") || TipoPob.equals("32")      ;

    //se omite la validación de edad para estos documentos
    if ((tipoDoc.equals("RC")  || tipoDoc.equals("TI") || tipoDoc.equals("PA") || tipoDoc.equals("CE") || tipoDoc.equals("SC") || tipoDoc.equals("PT")) && campo13Valido) {
        return false;
    }
       //Fin Ticket #8261 21122023         
            
            //Validación N01 CE --> MAYOR DE 7 AÑOS
            if (tipoDoc.equals("CE")) {

                long dias = ObtenerDiasEntreFechas.calcular(
                        fechaNacimiento, fechaActual);
                if (dias <= 2556) {
                    return true;
                } 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+360)) {
                    return true;
                } else {
                    return false;
                }
            }
            if (tipoDoc.equals("RC")) {

                long dias = ObtenerDiasEntreFechas.calcular(
                        fechaNacimiento, fechaActual);
                if (dias > (2921)) {
                    return true;
                } else {
                    return false;
                }
            }
   
            
            if (tipoDoc.equals("MS")) {
                
                long dias = ObtenerDiasEntreFechas.calcular(
                        fechaNacimiento, fechaActual);
                if (dias > (6480)) {
                    return true;
                } 
                else {
                    return false;
                }
            }
            
            if (tipoDoc.equals("AS")) {

                long dias = ObtenerDiasEntreFechas.calcular(
                        fechaNacimiento, fechaActual);
                if (dias < (6480)) {
                    return true;
                } else {
                    return false;
                }
            }            
            
            
            
        return false;
    }
}
