package com.ejie.ad74a.util.constantes;

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

import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ad74a.model.MotivosBaja;
import com.ejie.ad74a.util.comun.Utilidades;

/**
 * Tipos de entrada
 */

public enum MotivoBajaEnum {

	SINESPECIFICAR(1L, "motivoBaja.sinEspecificar", "1", 0), //
	RENUNCIASERVICIO(2L, "motivoBaja.renunciaServicio", "1", 0), //
	FALLECIMIENTO_MIGRADO(3L, "motivoBaja.fallecimientoPersonaUsuaria", "1", 0), //
	INGRESOPERMANENTE_COMUNICADO(4L, "motivoBaja.ingresoPermanenteComunicado", "1", 0), //
	TRASLADORESIDENCIA(5L, "motivoBaja.trasladoResidencia", "1", 0), //
	INSATISFACCION(6L, "motivoBaja.insatisfaccion", "1", 0), //
	NODISPONELINEA(7L, "motivoBaja.noDisponeDeLinea", "1", 0), //
	OTROSMOTIVOS_MIGRADO(8L, "motivoBaja.otrosMotivos", "1", 0), //
	INGRESO_RESIDENCIAL_PERMANENTE(9L, "motivoBaja.ingresoResidencialPermanente", "1", 0), //
	TRASLADO_RESIDENCIAL_FUERA_CAV(10L, "motivoBaja.trasladoResidencialFueraCav", "1", 0), //

	FALLECIMIENTO(11L, "motivoBaja.fallecimiento", "0", 0), //
	INGRESOPERMANENTE(12L, "motivoBaja.ingresopermanente", "0", 0), //
	PETICION_DESVINCULACION(13L, "motivoBaja.peticionDesvinculacion", "0", 0), //
	NO_ADAPTADO_RECHAZADO(14L, "motivoBaja.noAdaptadoRechazado", "0", 0), //
	NO_LINEA(15L, "motivoBaja.noLinea", "0", 0), //
	OTROSMOTIVOS(16L, "motivoBaja.otrosMotivos", "0", 0), //
	INCUMPLIEMIENTO(17L, "motivoBaja.incumpliemiento", "0", 0), //
	TRASLADO(18L, "motivoBaja.trasladoResidencialFueraCav", "0", 0);//

	private MotivoBajaEnum(Long id, String labelDesc, String baja, Integer esExclusivoDeOficio) {
		this.id = id;
		this.labelDesc = labelDesc;
		this.baja = baja;
		this.esExclusivoDeOficio = esExclusivoDeOficio;
	}

	public static final Integer EXCLUSIVO_DE_OFICIO_SI = 1;
	public static final Integer EXCLUSIVO_DE_OFICIO_NO = 0;

	public static final String BAJA_SI = "1";
	public static final String BAJA_NO = "0";

	private Long id;
	private String labelDesc;
	private String baja;
	private Integer esExclusivoDeOficio;

	public Long getId() {
		return this.id;
	}

	public Long getIdLongValue() {
		return Long.valueOf(this.id);
	}

	public String getLabelDesc() {
		return Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc,
				LocaleContextHolder.getLocale());
	}

	public String getLabelDesc(Locale locale) {
		return Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc, locale);
	}

	public String getBaja() {
		return baja;
	}

	public MotivosBaja getMotivosBaja33() {
		return new MotivosBaja(getId(), getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_ES),
				getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_EU), getBaja().toString(), null, null);
	}

	public static List<MotivosBaja> valuesMotivosBaja33(Integer recuperarExclusivosDeOficio, String recuperarDeBaja) {

		ArrayList<MotivosBaja> motivoBajaList = new ArrayList<MotivosBaja>();

		for (MotivoBajaEnum motivoBaja : MotivoBajaEnum.values()) {

			// Si se pasa el parametro deOficio, en caso de que no sea de oficio no se
			// pasaran los finales de oficio
			if (null != recuperarExclusivosDeOficio) {
				if (EXCLUSIVO_DE_OFICIO_SI.equals(recuperarExclusivosDeOficio)
						|| (EXCLUSIVO_DE_OFICIO_NO.equals(recuperarExclusivosDeOficio)
								&& motivoBaja.getEsExclusivoDeOficio().equals(EXCLUSIVO_DE_OFICIO_NO))) {
					if (null == recuperarDeBaja || BAJA_SI.contentEquals(recuperarDeBaja)
							|| motivoBaja.getBaja().equals(recuperarDeBaja)) {
						motivoBajaList.add(motivoBaja.getMotivosBaja33());
					}

				}
			} else {
				if (null == recuperarDeBaja || BAJA_SI.contentEquals(recuperarDeBaja)
						|| motivoBaja.getBaja().equals(recuperarDeBaja)) {
					motivoBajaList.add(motivoBaja.getMotivosBaja33());
				}
			}

		}

		return motivoBajaList;
	}

	public Integer getEsExclusivoDeOficio() {
		return esExclusivoDeOficio;
	}
}
