package com.ejie.ad74a.util.constantes;

import java.util.Locale;

import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ad74a.constantes.Constantes;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.ws.server.televida.model.Respuesta;
import com.ejie.x38.json.JSONArray;

/**
 * Respuesta proceso intercambio con Televida
 */

public enum RespuestasTelevidaEnum {

	OK("00", "respuesta.televida.ok"), //

	// Errores validación XSD (01)
	ERROR_VALIDAR_XSD("01", "respuesta.televida.validarXsd"), ERROR_GENERICO("01", "respuesta.televida.errorGenerico"),
	TERMINAL_OBLIGATORIO("01", "respuesta.televida.terminalObligatorio"), // *
	FECHA_ALTA_INSTALACION_OBLIGATORIO("01", "respuesta.televida.fechaAltaInstalacionObligatorio"), // *
	FECHA_ALTA_INSTALACION_INCORRECTA("01", "respuesta.televida.fInstError"),
	MOTIVO_INST_FUERA_PLAZO_INCORRECTO("01", "respuesta.televida.motivoInstFueraPlazoError"), // *
	TIPO_VALORACION_INCORRECTO("01", "respuesta.televida.tipoValoracionIncorrecto"),
	MODO_VALORACION_INCORRECTO("01", "respuesta.televida.modoValoracionIncorrecto"),
	FECHA_VALORACION_OBLIGATORIO("01", "respuesta.televida.fValoracionObligatorio"), // *
	FECHA_VALORACION_INCORRECTA("01", "respuesta.televida.fValoracionError"),
	DATOS_VALORACION_OBLIGATORIO("01", "respuesta.televida.datosValoracionObligatorio"), // *,
	DATOS_BENEFICIARIO_OBLIGATORIO("01", "respuesta.televida.datosBeneficiarioObligatorio"), // *,
	ALTO_RIESGO_INCORRECTO("01", "respuesta.televida.altoRiesgoError"),
	NIVEL_SOPORTE_OBLIGATORIO("01", "respuesta.televida.nivelSoporteObligatorio"), // *
	NIVEL_RIESGO_MALTRATO_INCORRECTO("01", "respuesta.televida.nivelRiesgoMaltratoError"),
	PERIOCIDAD_ACEPTADA_INCORRECTA("01", "respuesta.televida.periocidadAceptadaError"),
	IDIOMA_SOLICITANTE_INCORRECTO("01", "respuesta.televida.idiomaSolicitanteError"),
	MOTIVO_RETRASO_VALORACION_INCORRECTO("01", "respuesta.televida.motivoRetrasoValoracionError"),
	TIPO_BENEFICIARIO_OBLIGATORIO("01", "respuesta.televida.tipoBeneficiaioObligatorio"), // *
	TIPO_BENEFICIARIO_INCORRECTO("01", "respuesta.televida.tipoBeneficiaioError"), // *
	IDIOMA_PRESTACION_SERVICIO_OBLIGATORIO("01", "respuesta.televida.idiomaPrestacionServicioObligatorio"), // *
	IDIOMA_PRESTACION_SERVICIO_INCORRECTO("01", "respuesta.televida.idiomaPrestacionServicioError"), // *
	LONGITUD_CAMPO_CONTRATO_ACTUACION_SOBREPASADA("01", "respuesta.televida.longitudContratoActuacionSobrepasada"),
	LONGITUD_CAMPO_MOVIL_SOBREPASADA("01", "respuesta.televida.longitudMovilSobrepasada"), // *
	LONGITUD_CAMPO_EMAIL_SOBREPASADA("01", "respuesta.televida.longitudEmailSobrepasada"), // *
	LONGITUD_CAMPO_TELEFONO_SOBREPASADA("01", "respuesta.televida.longitudTelefonoSobrepasada"), // *
	LONGITUD_CAMPO_NUMDOCUMENTO_SOBREPASADA("01", "respuesta.televida.longitudNumDocumentoContactoSobrepasada"), // *
	NOMBRE_CONTACTO_OBLIGATORIO("01", "respuesta.televida.nombreContactoObligatorio"), // *
	LONGITUD_CAMPO_NOMBRE_SOBREPASADA("01", "respuesta.televida.longitudNombreContactoSobrepasada"), // *
	POSEE_LLAVES_CONTACTO_INCORRECTO("01", "respuesta.televida.poseeLlavesContactoError"), // *
	CONTACTO_INSTALACION_CONTACTO_INCORRECTO("01", "respuesta.televida.contactoIntalacionContactoError"), // *
	LONGITUD_CAMPO_APE1_SOBREPASADA("01", "respuesta.televida.longitudApe1ContactoSobrepasada"), // *
	LONGITUD_CAMPO_APE2_SOBREPASADA("01", "respuesta.televida.longitudApe2ContactoSobrepasada"), // *
	TLF1_CONTACTO_OBLIGATORIO("01", "respuesta.televida.nombreContactoObligatorio"), // *
	FECHA_BAJA_BENEFICIARIO_OBLIGATORIO("01", "respuesta.televida.fechaBajaBeneficiarioObligatorio"), // *
	FECHA_BAJA_BENEFICIARIO_INCORRECTA("01", "respuesta.televida.fechaBajaBeneficiarioError"), // *
	MOTIVO_BAJA_OBLIGATORIO("01", "respuesta.televida.motivoBajaObligatorio"), // *
	LONGITUD_CAMPO_IDLLAMADA_SOBREPASADA("01", "respuesta.televida.longitudIdLlamadaSobrepasada"), // *
	CANAL_COMUNICACION_OBLIGATORIO("01", "respuesta.televida.tiempoLlegadaIncorrecto"),
	MANTENER_INSTALACION_OBLIGATORIO("01", "respuesta.televida.tiempoLlegadaIncorrecto"),
	ORIGEN_COMUNICACION_OBLIGATORIO("01", "respuesta.televida.tiempoLlegadaIncorrecto"),
	LONGITUD_CAMPO_OBSERVACIONES_SOBREPASADA("01", "respuesta.televida.longitudObservacionesSobrepasada"),
	FECHA_BAJA_INSTALACION_OBLIGATOTIO("01", "respuesta.televida.fBajaInstObligatorio"), // *
	FECHA_BAJA_INSTALACION_INCORRECTA("01", "respuesta.televida.fBajaInstError"),
	FECHA_QUEJA_OBLIGATORIO("01", "respuesta.televida.fQuejaObligatorio"), // *
	FECHA_QUEJA_INCORRECTA("01", "respuesta.televida.fQuejaIncorrecta"),
	PROCEDENTE_INCORRECTO("01", "respuesta.televida.procedenteIncorrecto"),
	ESTADO_QUEJA_INCORRECTO("01", "respuesta.televida.estadoQuejaIncorrecto"),
	MOTIVO_QUEJA_INCORRECTO("01", "respuesta.televida.motivoQuejaIncorrecto"),
	TIPO_EMERGENCIA_OBLIGATORIO("01", "respuesta.televida.tipoEmergenciaObligatorio"), // *
	FECHA_EMERGENCIA_OBLIGATORIO("01", "respuesta.televida.fEmergenciaObligatorio"), // *
	FECHA_EMERGENCIA_INCORRECTA("01", "respuesta.televida.fEmergenciaIncorrecta"),
	TIEMPO_LLEGADA_EMERGENCIA_INCORRECTA("01", "respuesta.televida.tiempoLlegadaIncorrecta"),
	TIPO_INTERVENCION_OBLIGATORIO("01", "respuesta.televida.tipoIntervencionObligatorio"), // *
	FECHA_INTERVENCION_OBLIGATORIO("01", "respuesta.televida.fIntervencionObligatorio"), // *
	FECHA_INTERVENCION_INCORRECTA("01", "respuesta.televida.fIntervencionIncorrecta"),
	TIPO_PROTOCOLO_INCORRECTO("01", "respuesta.televida.tipoPorotocoloIncorrecto"),
	FECHA_ENTRADA_OBLIGATORIO("01", "respuesta.televida.fEntradaObligatorio"), // *
	FECHA_ENTRADA_INCORRECTA("01", "respuesta.televida.fEntradaIncorrecta"),
	FECHA_SALIDA_OBLIGATORIO("01", "respuesta.televida.fSalidaObligatorio"), // *
	FECHA_SALIDA_INCORRECTA("01", "respuesta.televida.fSalidaIncorrecta"),
	FECHA_COMUNICACION_OBLIGATORIO("01", "respuesta.televida.fComunicacionObligatorio"), // *
	FECHA_COMUNICACION_INCORRECTO("01", "respuesta.televida.fComunicacionIncorrecta"), // *
	NUMABONADO_OBLIGATORIO("01", "respuesta.televida.numAbonadoObligatorio"), // *
	LONGITUD_CAMPO_NUMABONADO_SOBREPASADA("01", "respuesta.televida.longitudNumAbonadoSobrepasada"), // *
	IDPETICION_OBLIGATORIO("01", "respuesta.televida.idPeticionObligatorio"), // *
	LONGITUD_CAMPO_IDPETICION_SOBREPASADA("01", "respuesta.televida.longitudIdPeticionSobrepasada"), // *
	TIPO_ALARMA_OBLIGATORIO("01", "respuesta.televida.tipoAlarmaObligatorio"), // *
	FECHA_ALARMA_OBLIGATORIO("01", "respuesta.televida.fAlarmaObligatorio"), // *
	FECHA_ALARMA_INCORRECTA("01", "respuesta.televida.fAlarmaIncorrecta"),
	TIPO_RESOL_ALARMA_INCORRECTO("01", "respuesta.televida.tipoResolAlarmaIncorrecto"),
	EMAIL_INCORRECTO("01", "mailFormat"), FECHA_PRESTACION_INCORRECTA("25", "respuesta.televida.fPrestacionIncorrecta"),
	DURACION_LLAMADA_INCORRECTA("01", "respuesta.televida.duracionLlamadaIncorrecta"),
	TIEMPO_RESPUESTA_INCORRECTO("01", "respuesta.televida.tiempoRespuestaIncorrecto"),
	VALOR_LLAMADA_RESPUESTA_INCORRECTO("01", "respuesta.televida.valorLlamadaRespuestaIncorrecto"),
	TIPO_DISPOSITIVO_FUNCIONAL_OBLIGATORIO("01", "respuesta.televida.tipoDisFuncionalObligatorio"),
	RECURSO_MOVILIZADO_INCORRECTO("01", "respuesta.televida.recursoInmobilizadoIncorrecto"),

	// Errores ejecución proceso (03)
	ERROR_EJECUTAR_PROCESO("03", "respuesta.televida.errorExecute"),
	NIVEL_SOPORTE_INCORRECTO("03", "respuesta.televida.nivelSoporteError"), //
	TERMINAL_INCORRECTO("03", "respuesta.televida.terminalIncorrecto"),
	DISPOSITIVO_INCORRECTO("03", "respuesta.televida.dispositivoIncorrecto"),
	TIPO_ALARMA_INCORRECTA("03", "respuesta.televida.tipoAlarmaIncorrecta"),
	TIPO_DISP_SEGURIDAD_OBLIGATORIO("03", "respuesta.televida.tipoDispositivoSeguridadObligatorio"), // *
	LLAMADA_OBLIGATORIA("03", "respuesta.televida.llamadaObligatoria"),
	LLAMADAS_RECIBIDAS_EMITIDAS_OBLIGATORIO("03", "respuesta.televida.llamadasEmitidasRecibidasObligatorio"), // *
	LLAMADAS_RECIBIDAS_EMITIDAS_INCORRECTO("03", "respuesta.televida.llamadasEmitidasRecibidasIncorrecto"), // *
	TIPO_LLAMADA_RECIBIDA_OBLIGATORIO("03", "respuesta.televida.tipoLlamadaRecibidaObligatorio"), // *
	SUBTIPO_LLAMADA_RECIBIDA_OBLIGATORIO("03", "respuesta.televida.subTipoLlamadaRecibidaObligatorio"), // *
	SUBTIPO_LLAMADA_RECIBIDA_INCORRECTO("03", "respuesta.televida.subTipoLlamadaRecibidaIncorrecto"), // *
	TIPO_LLAMADA_INCORRECTA("03", "respuesta.televida.tipoLlamadaIncorrecta"),
	TIPO_LLAMADA_EMITIDA_INCORRECTO("03", "respuesta.televida.tipoLlamadaEmitidaIncorrecto"), // *
	SUBTIPO_LLAMADA_EMITIDA_INCORRECTO("03", "respuesta.televida.subTipoEmitidaRecibidaIncorrecto"), // *
	MOTIVO_BAJA_INCORRECTO("03", "respuesta.televida.motivoBaja"),
	TIPO_INTERVENCION_INCORRECTO("03", "respuesta.televida.tipoIntervencionIncorrecto"),
	TIPO_EMERGENCIA_INCORRECTO("03", "respuesta.televida.tipoEmergenciaIncorrecto"),

	// Otros errores (02, 04)
	BENEFICIARIO_NO_EXISTE("02", "respuesta.televida.beneficiarioError"),
	INSTALACION_YA_EXISTE("04", "respuesta.televida.errorInstalacionExiste"),
	// Faltan otros 3 del 04

	// No se usan actualmente
	DATO_BENEFICIARIO_INCOSISTENTE("6", "respuesta.televida.beneficiarioIncos"),
	DOCUMENTO_VALORACION_INCORRECTO("10", "respuesta.televida.docValoracionError"),
	SUBTIPO_LLAMADA_OBLIGATORIO("27", "respuesta.televida.subtipoLlamadaObligatorio"),
	SUBTIPO_LLAMADA_INCORRECTA("31", "respuesta.televida.subtipoLlamadaIncorrecta"),
	ID_LLAMADA_INCORRECTO("34", "respuesta.televida.idLlamadaIncorrecto"),
	TIEMPO_LLEGADA_INCORRECTO("46", "respuesta.televida.tiempoLlegadaIncorrecto"),

	// En proceso
	EN_PROCESO("99", "respuesta.televida.enProceso");

	/**
	 * Constructor privado.
	 * 
	 * id Integer
	 *
	 * @param id the id error expediente
	 */
	private RespuestasTelevidaEnum(String codRespuesta, String labelDesc) {
		this.labelDesc = labelDesc;
		this.codRespuesta = codRespuesta;
	}

	private String codRespuesta;
	private String labelDesc;

	public String getCodRespuesta() {
		return this.codRespuesta;
	}

	public String getLabelDesc() {
		String text = Utilidades.getLabelFromResource(
				com.ejie.ad74a.util.constantes.Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc,
				LocaleContextHolder.getLocale());
		return "".equals(text) || null == text ? this.labelDesc : text;
	}

	public String getLabelDesc(Locale locale) {
		String text = Utilidades.getLabelFromResource(
				com.ejie.ad74a.util.constantes.Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc, locale);
		return "".equals(text) || null == text ? this.labelDesc : text;
	}

	public static String getDesc(String id) {
		for (RespuestasTelevidaEnum error : RespuestasTelevidaEnum.values()) {
			if (error.getCodRespuesta().equalsIgnoreCase(id)) {
				return error.getLabelDesc();
			}
		}
		return null;
	}

	public Respuesta getRespuesta() {
		Respuesta respuesta = new Respuesta();
		respuesta.setCodRespuesta(this.getCodRespuesta());
		respuesta.setMensaje(this.getLabelDesc());
		respuesta.setFRespuesta(
				UtilidadesFecha.getFechaSistema(com.ejie.ad74a.constantes.Constantes.TIMESTAMP_MASK_DEFAULT));
		return respuesta;
	}

	public static JSONArray getTiposError() {

		JSONArray errores = new JSONArray();

		for (RespuestasTelevidaEnum error : RespuestasTelevidaEnum.values()) {
			errores.put(error.getCodRespuesta());
		}
		return errores;

	}

}
