/*
 * ValorCampoDependienteSegunEdad.java
 *
 * Created on 25 de marzo de 2007, 12:47 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
// 9,N22,2,8,30,6
package com.fidufosyga.rules;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

/**
 * 
 * @author Julian
 */
public class FechaNovedadVsFechaNacimientoCamposDependientes extends AbstractRule {

	String DATE_FORMAT = "dd/MM/yyyy";

	SimpleDateFormat sdf;

	/** Creates a new instance of CampoLlenoParaUnValorDiferenteDeOtroCampo */

	public FechaNovedadVsFechaNacimientoCamposDependientes() {
		sdf = new SimpleDateFormat(DATE_FORMAT);
		sdf.setLenient(false);
	}

	public boolean performValidation(String field, String registro[],
			String nombreArchivo) {
		
		String valorOtroCampo;
		String SegundovalorOtroCampo;
		
		/**System.out.println("Tamano: " + getParams().length);**/
		
		if(getParams().length == 7){
			
			valorOtroCampo = registro[new Integer((String) getParams()[0])
			.intValue()];
	
			/**System.out.println("Otro Campo: " + valorOtroCampo);
			System.out.println("Campo Actual: " + field);**/

			if (valorOtroCampo.equals((String) getParams()[1]) ) {			
				if(field.equals((String) getParams()[2]))
				{
					String fechaNacimiento = registro[new Integer(
							(String) getParams()[3]).intValue()];
					
					if (!ValidarFecha.esFecha(fechaNacimiento))
						return true;
					
					Date dtFechaNacimiento = null;	
				
					String fechaNovedad = registro[new Integer(
							(String) getParams()[4]).intValue()];
                                
                                        
					if (!ValidarFecha.esFecha(fechaNovedad))
						return true;
					
					Date dtfechaNovedad = null;	
					
					/**System.out.println("Fecha Nacido: " + fechaNacimiento);
					System.out.println("Fecha Novedad: " + fechaNovedad);**/
					
					try {
						dtFechaNacimiento = sdf.parse(fechaNacimiento);
						dtfechaNovedad = sdf.parse(fechaNovedad);
					} catch (ParseException e) {
						/**System.out.println("Fecha Error: " + fechaNovedad + " - " + fechaNacimiento);**/
						e.printStackTrace();
					}
					
					float edadAnnos = ObtenerDiasEntreFechas.calcular(dtFechaNacimiento,
							dtfechaNovedad);
					
					/**System.out.println("Edad Calculadaooooooooooooooooo: " + (edadAnnos/365));
					System.out.println("Edad Enviada: " + new Float((String) getParams()[5]).intValue());
                                        System.out.println("Edad Calculadaooooooooooooooooo: " + registro[14]);**/

                                        
					if ((edadAnnos/365) >  new Float((String) getParams()[5]).intValue() && !registro[new Float((String) getParams()[6]).intValue()].equals ("D") ) {
						return true;
		
					}
					else
						return false;
				}
	
			}
		}
		if(getParams().length == 9){
			
			valorOtroCampo = registro[new Integer((String) getParams()[0])
			.intValue()];
			
			SegundovalorOtroCampo = registro[new Integer((String) getParams()[6])
			.intValue()];
	
			/**System.out.println("Otro Campo: " + valorOtroCampo);
			System.out.println("Campo Actual: " + field);**/
			
			
			if (SegundovalorOtroCampo.equals((String) getParams()[7])) {

				if (valorOtroCampo.equals((String) getParams()[1])) {
					
					if(field.equals((String) getParams()[2]))
					{
						String fechaNacimiento = registro[new Integer(
								(String) getParams()[3]).intValue()];
						
						if (!ValidarFecha.esFecha(fechaNacimiento))
							return true;
						
						Date dtFechaNacimiento = null;	
					
						String fechaNovedad = registro[new Integer(
								(String) getParams()[4]).intValue()];
						if (!ValidarFecha.esFecha(fechaNovedad))
							return true;
						
						Date dtfechaNovedad = null;	
						
						/**System.out.println("Fecha Nacido: " + fechaNacimiento);
						System.out.println("Fecha Novedad: " + fechaNovedad);**/
						
						try {
							dtFechaNacimiento = sdf.parse(fechaNacimiento);
							dtfechaNovedad = sdf.parse(fechaNovedad);
						} catch (ParseException e) {
							/**System.out.println("Fecha Error: " + fechaNovedad + " - " + fechaNacimiento);**/
							e.printStackTrace();
						}
						
						float edadAnnos = ObtenerDiasEntreFechas.calcular(dtFechaNacimiento,
								dtfechaNovedad);
						
						/**System.out.println("Edad Calculada: " + (edadAnnos/365));
						System.out.println("Edad Enviada: " + new Float((String) getParams()[5]).intValue());**/
			
						if ((edadAnnos/365) >  new Float((String) getParams()[5]).intValue() && !registro[new Float((String) getParams()[8]).intValue()].equals ("D")) {
			
							return true;
			
						}
						else
							return false;
					}
		
				}
			}
		}
		return false;
	}

}