package com.ejie.ab39a.validations;

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

import org.springframework.stereotype.Component;

import com.ejie.ab39a.constantes.Constantes;
import com.ejie.ab39a.constantes.TipoEntidadEnum;
import com.ejie.ab39a.exceptions.ErrorField;
import com.ejie.ab39a.model.PlanesEstrategicos;
import com.gfi.utils.Utilities;

/**
 * Clase encargada de las validaciones de los planes estrategicos
 * 
 *  
 *
 */
@Component
public class PlanesEstrategicosValidator {

	/**
	 * Método PlanesEstrategicosValidator
	 */
	public PlanesEstrategicosValidator() {
		super();
	}

	/**
	 * Valida Entidad y devuelve la mapa con los errores.
	 * 
	 * @param planEstrategico
	 *            PlanesEstrategicos objeto PlanesEstrategicos
	 * @return List<ErrorField> lista de errores
	 */
	public List<ErrorField> validate(PlanesEstrategicos planEstrategico) {
		List<ErrorField> errorFields = new ArrayList<ErrorField>();
		Integer tipoEntidad = planEstrategico.getEntidad().getTipoEntidad();

		if (tipoEntidad == TipoEntidadEnum.ENPRESA_PRIBATUA.getId()
				|| tipoEntidad == TipoEntidadEnum.ENTE_PUBLIKOA.getId()) {
			// Fecha fin obligatorio
			if (Utilities.isEmptyNumber(planEstrategico.getAnyofin())) {
				errorFields.add(new ErrorField("planEstrategico.anio.fin", "validacion.obligatorio"));
			} else if (planEstrategico.getAnyofin() < 0) {
				errorFields.add(new ErrorField("planEstrategico.anio.fin", "validacion.numPositivo"));
			}

			if (!Utilities.isEmptyNumber(planEstrategico.getAnyoinicio())
					&& !Utilities.isEmptyNumber(planEstrategico.getAnyofin())
					&& planEstrategico.getAnyofin() < planEstrategico.getAnyoinicio()) {
				errorFields.add(new ErrorField("planEstrategico.anio.inicio", "validacion.anyoInicioFin"));

			}

			/*
			 * if
			 * (Utilities.isEmptyNumber(planEstrategico.getPorcentajeBiling()))
			 * { errorFields.add(new
			 * ErrorField("planEstrategico.porcentaje.biling",
			 * "validacion.obligatorio")); } else
			 * 
			 */
			if (planEstrategico.getPorcentajeBiling() != null) {
				if (planEstrategico.getPorcentajeBiling() > Constantes.PORCENTAJE_TOTAL) {
					errorFields.add(
							new ErrorField("planEstrategico.porcentaje.biling", "validacion.porcentajeBiling.mayor"));
				} else if (planEstrategico.getPorcentajeBiling() < Constantes.PORCENTAJE_0) {
					errorFields.add(
							new ErrorField("planEstrategico.porcentaje.biling", "validacion.porcentajeBiling.menor"));
				}
			}
		}

		if (tipoEntidad == TipoEntidadEnum.HERRI_ADMINISTRAZIOA.getId()) {
			// Indice obligatorio
			/*
			 * if (Utilities.isEmptyNumber(planEstrategico.getIndiceObligat()))
			 * { errorFields.add(new ErrorField("planEstrategico.indice.oblig",
			 * "validacion.obligatorio")); } // Nivel cumplimiento if
			 * (Utilities.isEmptyNumber(planEstrategico.
			 * getNivelCumplimientoReqeus())) { errorFields.add(new
			 * ErrorField("planEstrategico.nivel.cumplimiento",
			 * "validacion.obligatorio")); }
			 */

			if (Utilities.isEmptyNumber(planEstrategico.getAnyoinicio())) {
				errorFields.add(new ErrorField("planEstrategico.anio.inicio", "validacion.obligatorio"));
			} else {
				if (planEstrategico.getPlanificacion() != null
						&& planEstrategico.getPlanificacion().getFechainicio() != null) {
					if (planEstrategico.getAnyoinicio() < planEstrategico.getPlanificacion().getFechainicio()) {
						errorFields.add(new ErrorField("planEstrategico.anio.inicio", "validacion.anyioInicio"));
					}
					if (planEstrategico.getAnyoinicio() > planEstrategico.getPlanificacion().getFechafin()) {
						errorFields.add(new ErrorField("planEstrategico.anio.inicio", "validacion.anyioFin"));
					}
				}
			}

		}
		// Fecha inicio obligatorio
		if (Utilities.isEmptyNumber(planEstrategico.getAnyoinicio())) {
			errorFields.add(new ErrorField("planEstrategico.anio.inicio", "validacion.obligatorio"));
		} else if (planEstrategico.getAnyoinicio() < 0) {
			errorFields.add(new ErrorField("planEstrategico.anio.inicio", "validacion.numPositivo"));
		}

		// Nombre castellano obligatorio
		if (Utilities.isEmptyNumber(planEstrategico.getNombre())
				&& Utilities.isEmptyNumber(planEstrategico.getNombreeus())) {
			errorFields.add(new ErrorField("planEstrategico.nombre", "validacion.nombre"));
		}

		// Fecha aceptacion
		// if (planEstrategico.getFechaAceptacionPlanStr() == null) {
		// errorFields.add(new ErrorField("planEstrategico.fecha.aceptacion",
		// "validacion.obligatorio"));
		// }

		return errorFields;
	}

}
