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.Combo;
import com.ejie.ad74a.util.comun.Utilidades;

/**
 * enum que contiene todas los procedimientos
 *
 * id: cod de procedimiento en platea
 * 
 * desc: descripcion
 * 
 * sufixProcedure - Sufijo usado para generar el folderNumber
 * 
 * idLibroReg
 */

public enum ProcedimientosEnum {

	ALTA("0087002", "idProcedimiento00.alta", "", "02",
			com.ejie.ad74a.util.constantes.Constantes.MailBox.PLATEA_PROCEDURE_MAILBOX_ALTA, "AUTORI",
			"familia.autorizacion.desc"), //
	BAJA("0087003", "idProcedimiento00.baja", "B", "03",
			com.ejie.ad74a.util.constantes.Constantes.MailBox.PLATEA_PROCEDURE_MAILBOX_BAJA, "AUTORI",
			"familia.autorizacion.desc"), //
	MODIFICACION("0087004", "idProcedimiento00.modificacion", "M", "04",
			com.ejie.ad74a.util.constantes.Constantes.MailBox.PLATEA_PROCEDURE_MAILBOX_MODIFICACION, "COMUNIC",
			"familia.comunicacion.desc"), //
	REVISION_PRECIO("0087005", "idProcedimiento00.revisionPrecio", "P", "05",
			com.ejie.ad74a.util.constantes.Constantes.MailBox.PLATEA_PROCEDURE_MAILBOX_REVISION_PRECIO, "AUTORI",
			"familia.autorizacion.desc"), //
	INFORME("0087006", "idProcedimiento00.informe", "I", "06",
			com.ejie.ad74a.util.constantes.Constantes.MailBox.PLATEA_PROCEDURE_MAILBOX_INFORME_INTERVENCION, "COMUNIC",
			"familia.comunicacion.desc"),
	NOTIFICACION_LIQUIDACION("0087007", "idProcedimiento00.notificacionLiquidacion", "N", "07",
			com.ejie.ad74a.util.constantes.Constantes.MailBox.PLATEA_PROCEDURE_MAILBOX_NOTIFICACION_LIQUIDACION,
			"NOTIF", "familia.actosAdministrativos.desc"),
	X87_TEA_1("X87_TEA_1", "idProcedimiento00.X87_TEA_1", null, null, null, null, null), //
	X87_TEA_2("X87_TEA_2", "idProcedimiento00.X87_TEA_2", null, null, null, null, null), //
	X87_TEA_4("X87_TEA_4", "idProcedimiento00.X87_TEA_4", null, null, null, null, null);

	private ProcedimientosEnum(String id, String labelDesc, String sufixProcedure, String idLibroReg, String mailBox,
			String familyId, String familyName) {
		this.id = id;
		this.labelDesc = labelDesc;
		this.sufixProcedure = sufixProcedure;
		this.idLibroReg = idLibroReg;
		this.mailBox = mailBox;
		this.familyId = familyId;
		this.familyName = familyName;
	}

	private String id;
	private String labelDesc;
	private String sufixProcedure;
	private String idLibroReg;
	private String mailBox;
	private String familyId;
	private String familyName;

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

	public String getSufixProcedure() {
		return this.sufixProcedure;
	}

	public String getIdLibroReg() {
		return this.idLibroReg;
	}

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

	public String getLabelDesc(String id) {
		String desc = "";
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(id)) {
				desc = Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, proc.getLabelDesc(),
						LocaleContextHolder.getLocale());
			}
		}
		return desc;
	}

	public static String getIdProcByIdLibroReg(String idLibroReg) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getIdLibroReg().equalsIgnoreCase(idLibroReg)) {
				return proc.getId();
			}
		}
		return "";
	}

	public static String getSufixProcedureByProcedure(String idProcedure) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(idProcedure)) {
				return proc.getSufixProcedure();
			}
		}
		return "";
	}

	public static String getDesc(String id) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equals(id)) {
				return proc.getLabelDesc();
			}
		}
		return null;
	}

	public static ProcedimientosEnum getById(String id) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equals(id)) {
				return proc;
			}
		}
		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 String getLabelDesc(Locale locale) {
		return Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, this.labelDesc, locale);
	}

	public static String getLabelDescEs(String procedureID) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(procedureID)) {
				return proc.getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_ES);
			}
		}
		return "";
	}

	public static String getLabelDescEu(String procedureID) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(procedureID)) {
				return proc.getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_EU);
			}
		}
		return "";
	}

	public static String getMailBox(String procedureID) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(procedureID)) {
				return proc.getMailBox();
			}
		}
		return "";
	}

	public String getMailBox() {
		return mailBox;
	}

	public static List<ProcedimientosEnum> getCurrentProcs() {

		List<ProcedimientosEnum> lista = new ArrayList<ProcedimientosEnum>();
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (!proc.getId().equalsIgnoreCase(ProcedimientosEnum.X87_TEA_1.getId())
					&& !proc.getId().equalsIgnoreCase(ProcedimientosEnum.X87_TEA_2.getId())
					&& !proc.getId().equalsIgnoreCase(ProcedimientosEnum.X87_TEA_4.getId())) {
				lista.add(proc);
			}
		}

		return lista;

	}

	public static String getFamilyId(String procedureID) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(procedureID)) {
				return proc.familyId;
			}
		}
		return "";
	}

	public static String getFamilyNameEs(String procedureID) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(procedureID)) {
				return Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, proc.familyName,
						com.ejie.ad74a.constantes.Constantes.LOCALE_ES);
			}
		}
		return "";
	}

	public static String getFamilyNameEu(String procedureID) {
		for (ProcedimientosEnum proc : ProcedimientosEnum.values()) {
			if (proc.getId().equalsIgnoreCase(procedureID)) {
				return Utilidades.getLabelFromResource(Constantes.BASENAME_RESOURCE_AD74A_I18N, proc.familyName,
						com.ejie.ad74a.constantes.Constantes.LOCALE_EU);
			}
		}
		return "";
	}

}
