package com.ejie.ad74a.util.constantes;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Locale;

import org.springframework.context.i18n.LocaleContextHolder;

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

/**
 * Estados de un expediente
 */

public enum TipoIdentificadorEnum {

	DNI("1", "tipoIdentificacion.dni", new ArrayList<Integer>(Arrays.asList(Constantes.TIPO_PERSONA_FISICA_BBDD))),
	CIF("2", "tipoIdentificacion.cif", new ArrayList<Integer>(Arrays.asList(Constantes.TIPO_PERSONA_JURIDICA_BBDD))),
	NIE("3", "tipoIdentificacion.nie", new ArrayList<Integer>(Arrays.asList(Constantes.TIPO_PERSONA_FISICA_BBDD))),
	PASAPORTE("4", "tipoIdentificacion.pasaporte",
			new ArrayList<Integer>(Arrays.asList(Constantes.TIPO_PERSONA_FISICA_BBDD))),
	OTROS("5", "tipoIdentificacion.otros", new ArrayList<Integer>(
			Arrays.asList(Constantes.TIPO_PERSONA_FISICA_BBDD, Constantes.TIPO_PERSONA_JURIDICA_BBDD)));

	private TipoIdentificadorEnum(String id, String labelDesc, ArrayList<Integer> tipoPersona) {
		this.labelDesc = labelDesc;
		this.id = id;
		this.tipoPersonaList = tipoPersona;
	}

	private String id;
	private String labelDesc;
	private ArrayList<Integer> tipoPersonaList;

	public String getId() {
		return 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 static String getDescEs(String id) {
		for (TipoIdentificadorEnum tipo : TipoIdentificadorEnum.values()) {
			if (tipo.getId().equalsIgnoreCase(id)) {
				return Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, tipo.labelDesc,
						com.ejie.ad74a.constantes.Constantes.LOCALE_ES);
			}
		}
		return null;
	}

	public Combo getCombo() {
		return new Combo(id.toString(),
				Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc,
						com.ejie.ad74a.constantes.Constantes.LOCALE_ES),
				Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc,
						com.ejie.ad74a.constantes.Constantes.LOCALE_EU));
	}

	public static TipoIdentificadorEnum[] valuesByTipoPersona(Integer tipoPersona) {

		ArrayList<TipoIdentificadorEnum> tipoIdentificadorEnumList = new ArrayList<TipoIdentificadorEnum>();
		TipoIdentificadorEnum[] situacioneFinalTareaArray = null;
		if (tipoPersona != null) {
			for (TipoIdentificadorEnum tipoIdentificador : TipoIdentificadorEnum.values()) {
				if (tipoIdentificador.getTipoPersonaList().contains(tipoPersona)) {
					tipoIdentificadorEnumList.add(tipoIdentificador);
				}
			}
			situacioneFinalTareaArray = new TipoIdentificadorEnum[tipoIdentificadorEnumList.size()];
			tipoIdentificadorEnumList.toArray(situacioneFinalTareaArray);
		} else {

			situacioneFinalTareaArray = TipoIdentificadorEnum.values();
		}

		return situacioneFinalTareaArray;
	}

	public ArrayList<Integer> getTipoPersonaList() {
		return tipoPersonaList;
	}

	public void setTipoPersonaList(ArrayList<Integer> tipoPersonaList) {
		this.tipoPersonaList = tipoPersonaList;
	}

}
