package com.ejie.ad74a.validacion;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Component;

import com.ejie.ad74a.exceptions.Ad74aException;
import com.ejie.ad74a.exceptions.ErrorField;
import com.ejie.ad74a.exceptions.Mensaje;
import com.ejie.ad74a.exceptions.ParametroKey;
import com.ejie.ad74a.model.Ayuntamientos;
import com.ejie.ad74a.model.Iprem;
import com.ejie.ad74a.service.IpremService;
import com.ejie.ad74a.util.comun.UtilLiterales;
import com.ejie.ad74a.util.comun.UtilValidaciones;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.util.constantes.FormaPagoEnum;

@Component(value = "IpremValidator")
public class IpremValidator {
	private static final Logger LOGGER = LoggerFactory.getLogger(IpremValidator.class);

	private static final String LABEL_IPREM = "iprem.importe";
	private static final String LABEL_ANIO_INCORRECTO = "iprem.error.fecha";
	private static final String LABEL_ANIO_REPETIDO = "iprem.error.fechaRepetida";
	private static final String LABEL_IMPORTE_NO_PERMITIDO = "iprem.error.importeNoPermitido";
	private static final String LABEL_ANIO_REPETIDO_EDIT = "iprem.error.fechaRepetidaEdit";

	private static final String LABEL_FECHA_ERRONEA = "iprem.error.fechaErronea";
	private static final String LABEL_CAMPO_OBLIGATORIO = "iprem.error.campoObligatorio";
	private static final String LABEL_FECHA_REPETIDA = "iprem.error.fechaRepetida";
	private static final String LABEL_IMPORTE_INADECUADO = "iprem.error.importeInadecuado";

	@Resource
	private ReloadableResourceBundleMessageSource appMessageSource;

	@Autowired
	private IpremService ipremService;

	public void validate(List<ErrorField> errorFields, Iprem iprem, String oper) {
		IpremValidator.LOGGER.info("ipremValidator: validate ");
//
//		if (iprem == null) {
//			throw new Ad74aException(UtilLiterales.getLiteralMessage(appMessageSource, Constantes.ERROR_GENERICO));
//		}
//
//		// #########################
//		// ###### CIF31 ######
//		// #########################
//
		int year = Calendar.getInstance().get(Calendar.YEAR);
		// # Vacío #
		if (Boolean.TRUE.equals(Utilidades.isEmpty(iprem.getIprem79Str()))) {
			errorFields.add(new ErrorField(IpremValidator.LABEL_IPREM, IpremValidator.LABEL_CAMPO_OBLIGATORIO));
		} else if (iprem.getAnio79() < 1900 || iprem.getAnio79() > year) {
			errorFields.add(new ErrorField(IpremValidator.LABEL_ANIO_INCORRECTO, IpremValidator.LABEL_FECHA_ERRONEA));
		}

		Iprem ipremFilter = new Iprem();
		ipremFilter.setAnio79(iprem.getAnio79());
		if (!this.ipremService.findAllLike(ipremFilter, null, false).isEmpty() && oper.equals("add")) {
			errorFields.add(new ErrorField(IpremValidator.LABEL_ANIO_REPETIDO, IpremValidator.LABEL_FECHA_ERRONEA));
		}

		if (iprem.getIprem79().longValue() == 0) {
			errorFields.add(
					new ErrorField(IpremValidator.LABEL_IMPORTE_NO_PERMITIDO, IpremValidator.LABEL_IMPORTE_INADECUADO));
		}
//
//		// #########################
//		// #### DENOMINACION31 ####
//		// #########################
//
//		// # Demasiados Caracteres #
//		if (Boolean.TRUE
//				.equals(!Utilidades.validarLongitud(ayuntamientos.getDescEs31(), IpremValidator.MAX_LENGTH_DESC31))) {
//			errorFields.add(new ErrorField(IpremValidator.LABEL_DESC_ES_31, UtilValidaciones.getMensajeValidaLongitud(
//					Utilidades.getLength(ayuntamientos.getDescEs31()), IpremValidator.MAX_LENGTH_DESC31)));
//		}
//		if (Boolean.TRUE
//				.equals(!Utilidades.validarLongitud(ayuntamientos.getDescEs31(), IpremValidator.MAX_LENGTH_DESC31))) {
//			errorFields.add(new ErrorField(IpremValidator.LABEL_DESC_EU_31, UtilValidaciones.getMensajeValidaLongitud(
//					Utilidades.getLength(ayuntamientos.getDescEs31()), IpremValidator.MAX_LENGTH_DESC31)));
//		}
//
//		// #########################
//		// ###### DIRECCION31 ######
//		// #########################
//
//		// # Demasiados Caracteres #
//		if (Boolean.TRUE.equals(
//				!Utilidades.validarLongitud(ayuntamientos.getDireccion31(), IpremValidator.MAX_LENGTH_DIRECCION31))) {
//			errorFields.add(new ErrorField(IpremValidator.LABEL_DIRECCION31, UtilValidaciones.getMensajeValidaLongitud(
//					Utilidades.getLength(ayuntamientos.getDireccion31()), IpremValidator.MAX_LENGTH_DIRECCION31)));
//		}
//		if (Boolean.TRUE.equals(
//				!Utilidades.validarLongitud(ayuntamientos.getDireccion31(), IpremValidator.MAX_LENGTH_DIRECCION31))) {
//			errorFields.add(new ErrorField(IpremValidator.LABEL_DIRECCION31, UtilValidaciones.getMensajeValidaLongitud(
//					Utilidades.getLength(ayuntamientos.getDireccion31()), IpremValidator.MAX_LENGTH_DIRECCION31)));
//		}
//
//		// #########################
//		// ##### NUMCUENTA31 #######
//		// #########################
//
//		if (Boolean.TRUE.equals(Utilidades.isEmptyNumber(ayuntamientos.getFormaPago31()))) {
//			errorFields.add(new ErrorField(IpremValidator.LABEL_FORMAPAGO31, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
//		} else if (FormaPagoEnum.LIQ_DOM.getId().equals(ayuntamientos.getFormaPago31().toString())) {
//			// # Demasiados Caracteres #
//			if (Boolean.TRUE.equals(!Utilidades.validarLongitud(ayuntamientos.getNumCuenta31(),
//					IpremValidator.MAX_LENGTH_NUMCUENTA31))) {
//				errorFields.add(new ErrorField(IpremValidator.LABEL_NUMCUENTA31,
//						UtilValidaciones.getMensajeValidaLongitud(Utilidades.getLength(ayuntamientos.getNumCuenta31()),
//								IpremValidator.MAX_LENGTH_NUMCUENTA31)));
//			}
//			// # Vacío #
//			if (Boolean.TRUE.equals(Utilidades.isEmpty(ayuntamientos.getNumCuenta31()))) {
//				errorFields.add(
//						new ErrorField(IpremValidator.LABEL_NUMCUENTA31, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
//			} else {
//				// Validar IBAN
//				if (!UtilValidaciones.isIBANCorrecto(ayuntamientos.getNumCuenta31())) {
//					errorFields
//							.add(new ErrorField(IpremValidator.LABEL_NUMCUENTA31, UtilValidaciones.LABEL_ERROR_IBAN));
//				}
//			}
//
//			// #########################
//			// #### FAUTORIZACION31 ####
//			// #########################
//			if (ayuntamientos.getfAutorizacion31() == null) {
//				errorFields.add(
//						new ErrorField(IpremValidator.LABEL_FAUTORIZACION31, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
//			}
//		}
//
//		// #########################
//		// #### DIAFACTURACION31 ###
//		// #########################
//		// # Vacío #
//		if (Boolean.TRUE.equals(Utilidades.isEmptyNumber(ayuntamientos.getDiaFacturacion31()))) {
//			errorFields.add(
//					new ErrorField(IpremValidator.LABEL_DIAFACTURACION31, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
//		} else {
//			if (ayuntamientos.getDiaFacturacion31() < MIN_DIAFACTURACION
//					|| ayuntamientos.getDiaFacturacion31() > MAX_DIAFACTURACION) {
//				List<ParametroKey> listaParametros = new ArrayList<ParametroKey>();
//				listaParametros.add(new ParametroKey(String.valueOf(MIN_DIAFACTURACION), false));
//				listaParametros.add(new ParametroKey(String.valueOf(MAX_DIAFACTURACION), false));
//
//				Mensaje mensaje = new Mensaje(UtilValidaciones.LABEL_ERROR_RANGO_MIN_MAX);
//				mensaje.setParametrosKey(listaParametros);
//
//				errorFields.add(new ErrorField(IpremValidator.LABEL_DIAFACTURACION31, mensaje));
//			}
//		}
//
//		// #########################
//		// #### PERIODICIDAD31 #####
//		// #########################
//		// # Vacío #
//		if (Boolean.TRUE.equals(Utilidades.isEmptyNumber(ayuntamientos.getPeriodicidad31()))) {
//			errorFields
//					.add(new ErrorField(IpremValidator.LABEL_PERIODICIDAD31, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
//		} else {
//			if (ayuntamientos.getPeriodicidad31() < MIN_PERIODICIDAD
//					|| ayuntamientos.getPeriodicidad31() > MAX_PERIODICIDAD) {
//				List<ParametroKey> listaParametros = new ArrayList<ParametroKey>();
//				listaParametros.add(new ParametroKey(String.valueOf(MIN_PERIODICIDAD), false));
//				listaParametros.add(new ParametroKey(String.valueOf(MAX_PERIODICIDAD), false));
//
//				Mensaje mensaje = new Mensaje(UtilValidaciones.LABEL_ERROR_RANGO_MIN_MAX);
//				mensaje.setParametrosKey(listaParametros);
//
//				errorFields.add(new ErrorField(IpremValidator.LABEL_PERIODICIDAD31, mensaje));
//			}
//		}
//
//		// #########################
//		// #### CONTACTO31 #####
//		// #########################
//		if (Boolean.TRUE.equals(
//				!Utilidades.validarLongitud(ayuntamientos.getContacto31(), IpremValidator.MAX_LENGTH_CONTACTO31))) {
//			errorFields.add(new ErrorField(IpremValidator.LABEL_CONTACTO31, UtilValidaciones.getMensajeValidaLongitud(
//					Utilidades.getLength(ayuntamientos.getContacto31()), IpremValidator.MAX_LENGTH_CONTACTO31)));
//		}
	}
}
