/*
 * ValidaEdad.java
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package com.fidufosyga.rules;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * 
 * @author 
 */
public class ValidaEdad extends AbstractRule {

        @Override
	public void setParams(Object[] params) {
		super.setParams(params);
	}

        @Override
	public boolean performValidation(String field, String registro[],
			String nombreArchivo) {
		try {
            int indiceParametro1 = new Integer((String) getParams()[0]).intValue();
            String parametro1 = (String) getParams()[1];

            // Verifica si el primer parámetro es "D"
            if (registro[indiceParametro1].equals(parametro1)) {
                String fecha_ini = registro[new Integer((String) getParams()[2]).intValue()];
                String fecha_fin = registro[new Integer((String) getParams()[3]).intValue()];

                Calendar birth = new GregorianCalendar();
                Calendar today = new GregorianCalendar();
                int age;
                int factor = 0;
                
                // Formateo de fechas
                java.util.Date birthDate = new SimpleDateFormat("dd/MM/yyyy").parse(fecha_ini);
                java.util.Date currentDate = new SimpleDateFormat("dd/MM/yyyy").parse(fecha_fin);
                
                // Configuración de las fechas en los calendarios
                birth.setTime(birthDate);
                today.setTime(currentDate);
                
                if (today.get(Calendar.MONTH) <= birth.get(Calendar.MONTH)) 
{
                    if (today.get(Calendar.MONTH) == birth.get(Calendar.MONTH)) 
{
                        if (today.get(Calendar.DATE) > birth.get(Calendar.DATE)) 
{
                            factor = -1;
                        }
                    } 
else 
{
                        factor = -1;
                    }
                }
                
                age = (today.get(Calendar.YEAR) - birth.get(Calendar.YEAR)) + factor;

                // Condición adicional: Si el primer parámetro es "D", validar que la edad sea mayor de 25
                if ("D".equals(parametro1)) {
                    return age < 25;
                } else {
                    // 
                    return age >= 18;
                }
            } else {
                return false;
            }
        } catch (ParseException e) {
            e.printStackTrace();
            return true;
        }
    }
}

