package com.ejie.ad74a.validacion;

import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.model.Usuarios;
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;

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

	private static final String LABEL_IDENTIFICADOR80 = "usuarios.identificador";
	private static final String LABEL_NOMBRE80 = "usuarios.nombre";
	private static final String LABEL_APELLIDOS80 = "usuarios.apellidos";
	private static final String LABEL_USUXLNETS80 = "usuarios.usuXlnets";

	public static final int MAX_LENGTH_IDENTIFICADOR80 = 20;
	public static final int MAX_LENGTH_NOMBRE80 = 100;
	public static final int MAX_LENGTH_APELLIDOS80 = 200;
	public static final int MAX_LENGTH_USUXLNETS80 = 20;

	@Resource
	private ReloadableResourceBundleMessageSource appMessageSource;

	public void validate(List<ErrorField> errorFields, Usuarios usuarios) {
		UsuariosValidator.LOGGER.info("UsuariosValidator: validate ");

		if (usuarios == null) {
			throw new Ad74aException(UtilLiterales.getLiteralMessage(appMessageSource, Constantes.ERROR_GENERICO));
		}

		// #########################
		// ###### IDENTIFICADOR80 ######
		// #########################

		// # Demasiados Caracteres #
		if (Boolean.TRUE.equals(!Utilidades.validarLongitud(usuarios.getIdentificador80(),
				UsuariosValidator.MAX_LENGTH_IDENTIFICADOR80))) {
			errorFields.add(new ErrorField(UsuariosValidator.LABEL_IDENTIFICADOR80,
					UtilValidaciones.getMensajeValidaLongitud(Utilidades.getLength(usuarios.getIdentificador80()),
							UsuariosValidator.MAX_LENGTH_IDENTIFICADOR80)));
		}
		// # Vacío #
		if (Boolean.TRUE.equals(Utilidades.isEmpty(usuarios.getIdentificador80()))) {
			errorFields.add(
					new ErrorField(UsuariosValidator.LABEL_IDENTIFICADOR80, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
		}
//		else {
//			if (!usuarios.getIdentificador80()
//					.equalsIgnoreCase(com.ejie.ad74a.constantes.Constantes.XLNETS_USER_SSB_AD74A)
//					&& !Utilidades.isValidNif(usuarios.getIdentificador80())
//					&& !Utilidades.isValidNie(usuarios.getIdentificador80())) {
//				errorFields.add(new ErrorField(UsuariosValidator.LABEL_IDENTIFICADOR80,
//						UtilValidaciones.getMensajeValidaFormato(usuarios.getIdentificador80())));
//			}
//		}

		// #########################
		// #### NOMBRE80 ####
		// #########################

		// # Demasiados Caracteres #
		if (Boolean.TRUE
				.equals(!Utilidades.validarLongitud(usuarios.getNombre80(), UsuariosValidator.MAX_LENGTH_NOMBRE80))) {
			errorFields.add(new ErrorField(UsuariosValidator.LABEL_NOMBRE80, UtilValidaciones.getMensajeValidaLongitud(
					Utilidades.getLength(usuarios.getNombre80()), UsuariosValidator.MAX_LENGTH_NOMBRE80)));
		}
		// # Vacío #
		if (Boolean.TRUE.equals(Utilidades.isEmpty(usuarios.getNombre80()))) {
			errorFields.add(new ErrorField(UsuariosValidator.LABEL_NOMBRE80, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
		}

		// #########################
		// ##### APELLIDO180 #######
		// #########################

		// # Demasiados Caracteres #
		if (Boolean.TRUE.equals(
				!Utilidades.validarLongitud(usuarios.getApellidos80(), UsuariosValidator.MAX_LENGTH_APELLIDOS80))) {
			errorFields.add(new ErrorField(UsuariosValidator.LABEL_APELLIDOS80,
					UtilValidaciones.getMensajeValidaLongitud(Utilidades.getLength(usuarios.getApellidos80()),
							UsuariosValidator.MAX_LENGTH_APELLIDOS80)));
		}
		// # Vacío #
		if (Boolean.TRUE.equals(Utilidades.isEmpty(usuarios.getApellidos80()))) {
			errorFields
					.add(new ErrorField(UsuariosValidator.LABEL_APELLIDOS80, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
		}

		// #########################
		// #### USUXLNETS80 #####
		// #########################
		// # Demasiados Caracteres #
		if (Boolean.TRUE.equals(
				!Utilidades.validarLongitud(usuarios.getUsuXlnets80(), UsuariosValidator.MAX_LENGTH_USUXLNETS80))) {
			errorFields.add(new ErrorField(UsuariosValidator.LABEL_USUXLNETS80,
					UtilValidaciones.getMensajeValidaLongitud(Utilidades.getLength(usuarios.getUsuXlnets80()),
							UsuariosValidator.MAX_LENGTH_USUXLNETS80)));
		}
		// # Vacío #
		if (Boolean.TRUE.equals(Utilidades.isEmpty(usuarios.getUsuXlnets80()))) {
			errorFields
					.add(new ErrorField(UsuariosValidator.LABEL_USUXLNETS80, UtilValidaciones.LABEL_ERROR_OBLIGATORIO));
		}
	}
}
