package com.ejie.ad74a.util.constantes;

import java.util.ArrayList;

/**
 * Grados de dependencia
 */

public enum GradoDependenciaEnum {

	NA(null, "N/A", "gradoDependencia.na", 1),
	GRADO_I(1L, "Grado I", "gradoDependencia.grado_i", 0),
	GRADO_II(2L, "Grado II", "gradoDependencia.grado_ii", 0),
	GRADO_III(3L, "Grado III", "gradoDependencia.grado_iii", 0),
	GRADO_I_NIVEL_1(4L, "Grado I Nivel 1", "gradoDependencia.grado_i_nivel_1", 1),
	GRADO_I_NIVEL_2(5L, "Grado I Nivel 2", "gradoDependencia.grado_i_nivel_2", 1),
	GRADO_II_NIVEL_1(6L, "Grado II Nivel 1", "gradoDependencia.grado_ii_nivel_1", 1),
	GRADO_II_NIVEL_2(7L, "Grado II Nivel 2", "gradoDependencia.grado_ii_nivel_2", 1),
	GRADO_III_NIVEL_1(8L, "Grado III Nivel 1", "gradoDependencia.grado_iii_nivel_1", 1),
	GRADO_III_NIVEL_2(9L, "Grado III Nivel 2", "gradoDependencia.grado_iii_nivel_2", 1);

	private GradoDependenciaEnum(Long idBBDD, String idInterop, String labelDesc, Integer retrocompatibilidad) {
		//this.labelDesc = labelDesc;
		this.idBBDD = idBBDD;
		this.idInterop = idInterop;
		this.retrocompatibilidad = retrocompatibilidad;
	}

	public static Integer DATO_ACTIVO_SI = 1;
	public static Integer DATO_ACTIVO_NO = 0;

	private Long idBBDD;
	private String idInterop;
	//private String labelDesc;
	private Integer retrocompatibilidad;

	public Long getIdBBDD() {
		return this.idBBDD;
	}

	/*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 Combo getCombo() {
		return new Combo(idBBDD.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 GradoDependenciaEnum getByIdBBDD(Long idBBDD) {
		for (GradoDependenciaEnum e : values()) {
			if (e.idBBDD.equals(idBBDD))
				return e;
		}
		return null;
	}

	public static GradoDependenciaEnum getByIdInterop(String idInterop) {
		for (GradoDependenciaEnum e : values()) {
			if (e.idInterop.equalsIgnoreCase(idInterop))
				return e;
		}
		return null;
	}

	public Integer getRetrocompatibilidad() {
		return retrocompatibilidad;
	}

	public String getIdInterop() {
		return idInterop;
	}

	public static GradoDependenciaEnum[] valuesActivosYActual(Long valorActual) {

		ArrayList<GradoDependenciaEnum> tipoIdentificadorEnumList = new ArrayList<GradoDependenciaEnum>();
		GradoDependenciaEnum[] situacioneFinalTareaArray = null;
		if (valorActual != null) {
			for (GradoDependenciaEnum tipoIdentificador : GradoDependenciaEnum.values()) {
				if (tipoIdentificador.getRetrocompatibilidad().equals(DATO_ACTIVO_SI)
						|| tipoIdentificador.getIdBBDD().equals(valorActual)) {
					tipoIdentificadorEnumList.add(tipoIdentificador);
				}
			}
			situacioneFinalTareaArray = new GradoDependenciaEnum[tipoIdentificadorEnumList.size()];
			tipoIdentificadorEnumList.toArray(situacioneFinalTareaArray);
		} else {

			situacioneFinalTareaArray = GradoDependenciaEnum.valuesActivos();
		}

		return situacioneFinalTareaArray;
	}

	public static GradoDependenciaEnum[] valuesActivos() {

		ArrayList<GradoDependenciaEnum> tipoIdentificadorEnumList = new ArrayList<GradoDependenciaEnum>();
		GradoDependenciaEnum[] situacioneFinalTareaArray = null;

		for (GradoDependenciaEnum tipoIdentificador : GradoDependenciaEnum.values()) {
			if (tipoIdentificador.getRetrocompatibilidad().equals(DATO_ACTIVO_SI)) {
				tipoIdentificadorEnumList.add(tipoIdentificador);
			}
		}
		situacioneFinalTareaArray = new GradoDependenciaEnum[tipoIdentificadorEnumList.size()];
		tipoIdentificadorEnumList.toArray(situacioneFinalTareaArray);
		return situacioneFinalTareaArray;
	}
}
