package com.ejie.ad74a.util.constantes;

import com.ejie.ad74a.ws.client.platea.tareasTramitacion.TTaskType;

/**
 * enum que contiene todas las tareas que se pueden realizar en los trámites de
 * la app
 * 
 * Formato: nombre_tarea(id de base de datos, proceedingId definido en el flujo,
 * taskId definido en el flujo, ultima tarea del tramite true -> ultima, false
 * -> no, tipo de tarea en Platea)
 *
 */

public enum TareasEnum {

	APERTURA(1L, "APERTURA", "APERTURA", true, TTaskType.APERTURA),
	APER_PLAZO_DESIS(2L, "APER_PLAZO_DESIS", "APER_PLAZO_DESIS", true, TTaskType.GENERICA), //
	ESTUDIO(3L, "ESTUDIO", "ESTUDIO", true, TTaskType.ESTDOCU),
	RECEP_DOCUMENTACION(4L, "RECEPCION_DOCUMENTACION", "RECEPCION_DOCUMENTACION", true, null),
	RECEPCION_DESIS_EXPRESO(5L, "RECEPCION_DESIS_EXPRESO", "RECEPCION_DESIS_EXPRESO", true, null),
	ADJUNTAR_DOCUMENTACION(6L, "ADJUNTAR_DOCUMENTACION", "ADJUNTAR_DOCUMENTACION", true, TTaskType.APORDOCU),
	REQUERIMIENTO_SUBSANACION(7L, "REQUERIMIENTO_SUBSANACION", "REQUERIMIENTO_SUBSANACION", true, TTaskType.APORDOCU),
	NOTIFICACION_SUBSANACION(8L, "NOTIFICACION_SUBSANACION", "NOTIFICACION_SUBSANACION", false, TTaskType.NOTIFICACION), //
	ACUSENOTIFICACION_SUBSANA(9L, "NOTIFICACION_SUBSANACION", "ACUSENOTIFICACION_SUBSANA", true, TTaskType.RECINOTI),
	PASO_DESISTIMIENTO(10L, "PASO_DESISTIMIENTO", "PASO_DESISTIMIENTO", true, TTaskType.GENERICA),
	RESOL_DESISTIMIENTO(11L, "RESOL_DESISTIMIENTO", "RESOL_DESISTIMIENTO", true, TTaskType.APORDOCU),
	NOTI_RESOL_DESISTIMIENTO(12L, "NOTI_RESOL_DESISTIMIENTO", "NOTI_RESOL_DESISTIMIENTO", false,
			TTaskType.NOTIFICACION),
	ACUSE_NOTI_RESOL_DESIS(13L, "ACUSE_NOTI_RESOL_DESIS", "ACUSE_NOTI_RESOL_DESIS", true, TTaskType.RECINOTI),
	RESOL_CONCESION(14L, "RESOL_CONCESION", "RESOL_CONCESION", true, TTaskType.APORDOCU),

	NOTI_RESOL_CONCESION(15L, "NOTI_RESOL_CONCESION", "NOTI_RESOL_CONCESION", false, TTaskType.NOTIFICACION),
	ACUSE_NOTI_RESOL_CONCESION(16L, "ACUSE_NOTI_RESOL_CONCESION", "ACUSE_NOTI_RESOL_CONCESION", true,
			TTaskType.RECINOTI),

	RESOL_DENEGACION(18L, "RESOL_DENEGACION", "RESOL_DENEGACION", true, TTaskType.APORDOCU),
	NOTI_RESOL_DENEGACION(19L, "NOTI_RESOL_DENEGACION", "NOTI_RESOL_DENEGACION", false, TTaskType.NOTIFICACION),
	ACUSE_NOTI_RESOL_DENEGACION(20L, "ACUSE_NOTI_RESOL_DENEGACION", "ACUSE_NOTI_RESOL_DENEGACION", true,
			TTaskType.RECINOTI),
	SOLICITUD_INFORME_INTERVENCION(21L, "SOLICITUD_INFORME_INTERVENCION", "SOLICITUD_INFORME_INTERVENCION", true,
			TTaskType.GENERICA),
	COMUNICACION_INFORME(22L, "COMUNICACION_INFORME", "COMUNICACION_INFORME", true, TTaskType.COMUNICACION),

	CIERRE(17L, "CIERRE", "CIERRE", true, TTaskType.CERREXP),
	NOTI_TRAMITE_AUDIENCIA(24L, "NOTI_TRAMITE_AUDIENCIA", "NOTI_TRAMITE_AUDIENCIA", false, TTaskType.NOTIFICACION),
	ACUSE_NOTI_TRAMITE_AUDIENCIA(25L, "ACUSE_TRAMITE_AUDIENCIA", "ACUSE_TRAMITE_AUDIENCIA", true, TTaskType.RECINOTI),
	// BAJA_OFICIO(23L, "BAJA_OFICIO", "BAJA_OFICIO", true, TTaskType.APORDOCU),
	AUDIENCIA(23L, "AUDIENCIA", "AUDIENCIA", true, TTaskType.APORDOCU),
	APER_PLAZO_RECUR_DESIS(26L, "APER_PLAZO_RECUR_DESIS", "APER_PLAZO_RECUR_DESIS", true, TTaskType.GENERICA),
	RESOL_DENEGACION_SERVICIO_AUDIENCIA(27L, "RESOL_DENEGACION_SERVICIO_AUDIENCIA",
			"RESOL_DENEGACION_SERVICIO_AUDIENCIA", true, TTaskType.APORDOCU),
	NOTI_RESOL_DENEGACION_SERVICIO_AUDIENCIA(28L, "NOTI_DENEGACION_SERVICIO_AUDIENCIA",
			"NOTI_DENEGACION_SERVICIO_AUDIENCIA", false, TTaskType.NOTIFICACION),
	ACUSE_DENEGACION_SERVICIO_AUDIENCIA(29L, "ACUSE_DENEGACION_SERVICIO_AUDIENCIA",
			"ACUSE_DENEGACION_SERVICIO_AUDIENCIA", true, TTaskType.RECINOTI),
	NOTI_LIQUIDACION(30L, "NOTI_LIQUIDACION", "NOTI_LIQUIDACION", false, TTaskType.NOTIFICACION),
	ACUSE_NOTI_LIQUIDACION(31L, "ACUSE_NOTI_LIQUIDACION", "ACUSE_NOTI_LIQUIDACION", true, TTaskType.RECINOTI),
	APOR_CARTA_LIQUID(32L, "APOR_CARTA_LIQUID", "APOR_CARTA_LIQUID", true, TTaskType.APORDOCU);

	/**
	 * Constructor privado.
	 * 
	 * idtaskId Long
	 *
	 * @param idtaskId the id tipo doc
	 */
	private TareasEnum(Long id, String proceedingId, String taskId, boolean ultimaTarea, TTaskType taskType) {
		this.taskId = taskId;
		this.proceedingId = proceedingId;
		this.id = id;
		this.ultimaTarea = ultimaTarea;
		this.taskType = taskType;
	}

	private Long id;
	private String proceedingId;
	private String taskId;
	private boolean ultimaTarea;
	private TTaskType taskType;

	public boolean isUltimaTarea() {
		return ultimaTarea;
	}

	/**
	 * Gets the id
	 * 
	 * Long
	 *
	 * @return the id
	 */
	public Long getId() {
		return this.id;
	}

	/**
	 * Gets the proceedingId
	 * 
	 * Long
	 *
	 * @return the id tipo doc
	 */
	public String getProceedingId() {
		return this.proceedingId;
	}

	/**
	 * Gets the taskId
	 * 
	 * Long
	 *
	 * @return the taskId
	 */
	public String getTaskId() {
		return this.taskId;
	}

	public TTaskType getTaskType() {
		return this.taskType;
	}

	public static String getProceedingId(Long id) {
		for (TareasEnum tarea : TareasEnum.values()) {
			if (tarea.getId().compareTo(id) == 0) {
				return tarea.getProceedingId();
			}
		}
		return null;
	}

	public static String getTaskId(Long id) {
		for (TareasEnum tarea : TareasEnum.values()) {
			if (tarea.getId().compareTo(id) == 0) {
				return tarea.getTaskId();
			}
		}
		return null;
	}

	public static TTaskType getTaskType(Long id) {
		for (TareasEnum tarea : TareasEnum.values()) {
			if (tarea.getId().compareTo(id) == 0) {
				return tarea.getTaskType();
			}
		}
		return null;
	}

	/**
	 * Gets de TareasEnum en base al TaskId
	 * 
	 * @param taskId
	 * @return
	 */
	public static TareasEnum getEnumByTaskId(String taskId) {
		for (TareasEnum tarea : TareasEnum.values()) {
			if (tarea.getTaskId().equals(taskId)) {
				return tarea;
			}
		}
		return null;
	}

	/**
	 * Recupera el tipo de tarea Platea en función del taskId definido en el flujo
	 * 
	 * @param taskId taskId definido en el flujo
	 * @return TTaskType
	 */
	public static TTaskType getTaskType(String taskId) {
		for (TareasEnum tarea : TareasEnum.values()) {
			if (tarea.getTaskId().equals(taskId)) {
				return tarea.getTaskType();
			}
		}
		return null;
	}

}
