package com.ejie.ab63.service.procedimientos;

import java.util.HashMap;
import java.util.Map;

import com.ejie.ab63.comun.Constantes;
import com.ejie.ab63.model.Establecimiento;
import com.ejie.ab63.model.expedientes.Expedientes;
import com.ejie.ab63.model.inicio.InitForm;
import com.ejie.ab63.model.terceros.DatosDirecciones;
import com.ejie.ab63.service.EstablecimientoService;
import com.ejie.ab63.service.expedientes.DetailExpedienteService;

/**
 * 
 *  
 *
 */
public class ComprobacionInicioActividadProcedureActions extends BaseProcedureActions {

	protected ComprobacionInicioActividadProcedureActions(DetailExpedienteService detailExpedienteService) {
		super(Constantes.PROCEDIMIENTO_COMPROBACION_DE_OFICIO, detailExpedienteService);
	}

	@Override
	public Establecimiento findEstablecimiento(InitForm form) {
		Establecimiento establecimiento = null;

		DatosDirecciones datosDirecciones = findDireccioneEstablecimiento(form);
		// Si no ha una direccion asociada al expediente se crea, es
		// necesario para el correcto procesamiento.
		if (datosDirecciones == null || datosDirecciones.getIdDireccion() == null) {
			// DatosDirecciones direcciones = new DatosDirecciones();
			// DatosTerceros datosTerceros = new
			// DatosTerceros(form.getIdTerceroTitular());
			// direcciones.setDatosTerceros(datosTerceros);
			// direcciones.setTiposDireccion(new
			// TiposDireccion(Constantes.ID_UBICACION_INVERSION));
			// if (form.getIdTerceroTitular() != 0) {
			// this.getDetailExpedienteService().getDatosDireccionesService().add(direcciones);
			// }
			establecimiento = new Establecimiento();
		} else {
			establecimiento = this.getDetailExpedienteService().getEstablecimientoService()
					.findByIdenticadorEstablecimiento(datosDirecciones.getIdentificadorEstablecimiento());
		}

		return establecimiento;
	}

	@Override
	public DatosDirecciones findDireccioneEstablecimiento(InitForm form) {
		return this.getDetailExpedienteService().getDatosDireccionesService()
				.findEstablecimientoExpediente(form.getIdExpediente());
	}

	@Override
	public Boolean isEnableAccessInspecciones(InitForm form) {
		return this.getDetailExpedienteService().getExpedientesService().hasInspectExpedient(form.getIdExpediente());
	}

	@Override
	public Boolean isEnableSaveExpediente(InitForm form) {
		Boolean result = true;
		Expedientes expediente = new Expedientes();
		expediente.setIdExpediente(form.getIdExpediente());
		expediente = this.getDetailExpedienteService().getExpedientesService().find(expediente);

		if (expediente == null) {
			result = false;
		}
		// Si el expediente ya esta cerrado no se puede guardar
		if (result && expediente.getFechaCierre() != null) {
			result = false;
		}
		if (result && form.getProcedureId() == null) {
			result = false;
		}

		if (result && (form.getIdTerceroTitular() == null || form.getIdTerceroTitular() == 0)) {
			result = false;
		}

		return result && isEnableExecuteAction(form);
	}

	@Override
	public Boolean isEnableExecuteAction(InitForm form) {
		Boolean hasInspectSend = this.getDetailExpedienteService().getExpedientesService()
				.hasInspectExpedient(form.getIdExpediente());
		return !hasInspectSend;
	}

	@Override
	public Boolean isEnableCreateDocs(InitForm form) {
		return !form.isIdentificadorEmpty();
	}

	@Override
	public Map<String, String> executeAction(InitForm form) {
		return proccesComprobacionOficio(form);
	}

	private Map<String, String> proccesComprobacionOficio(InitForm form) {
		EstablecimientoService establecimientoService = this.getDetailExpedienteService().getEstablecimientoService();
		HashMap<String, String> data = new HashMap<String, String>(1);
		Establecimiento establecimiento = establecimientoService
				.findByIdenticadorEstablecimiento(form.getIdentificadorEstablecimiento());
		if (establecimiento == null || establecimiento.getIdEstablecimiento() == null) {
			data.put(Constantes.KEY_AJAX_ERROR, "identificadorError");
			return data;
		}

		establecimientoService.relacionarExpedienteOficio(form);

		data.put(Constantes.KEY_AJAX_CALLBACK, "enableInspect");
		data.put(Constantes.KEY_AJAX_MESSAGE, "expedienteComprobacionAsociado");
		if (form.getIdExpedienteOrigen() != null && form.getIdExpedienteOrigen() > 0) {
			data.put(Constantes.KEY_ID_ORIGEN, "" + form.getIdExpedienteOrigen());
		}
		return data;
	}

	@Override
	public String getButtonsText(InitForm form) {
		return form.getProcedureCod();
	}

}
