package com.ejie.ab63.service.procedimientos;

import java.util.Map;

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

/**
 * 
 *  
 *
 */
public class ConsultaPreviaProcedureActions extends BaseProcedureActions {

	protected ConsultaPreviaProcedureActions(DetailExpedienteService detailExpedienteService) {
		super(Constantes.PROCEDIMIENTO_CONSULTAS_ACTIVIDAD, detailExpedienteService);
	}

	@Override
	public Establecimiento findEstablecimiento(InitForm form) {
		// recuperar el establecimiento buscando por el idExpediente
		Establecimiento establecimiento = this.getDetailExpedienteService().getEstablecimientoService()
				.findEstablecimientoByIdExpediente(form.getIdExpediente());

		// Si no se encuentra por id expediente, ya ha sido procesado
		if (establecimiento == null || establecimiento.getIdEstablecimiento() == null) {
			DatosDirecciones datosDirecciones = findDireccioneEstablecimiento(form);
			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 isEnableSaveExpediente(InitForm initForm) {
		Boolean result = super.isEnableSaveExpediente(initForm);
		return result && isTipoRegistroTemp(initForm);
	}

	@Override
	public Boolean isEnableExecuteAction(InitForm form) {
		return form.isIdentificadorEmpty() || !form.isIdentificador(Constantes.TIPO_REGISTRO_PROVISIONAL);
	}

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

	private Map<String, String> processConsultaPrevia(InitForm initForm) {
		if (initForm.isIdentificadorEmpty() && initForm.isTipoRegistro(Constantes.TIPO_REGISTRO_TEMPORAL)) {
			return registroEstablecimientoProvisional(initForm);
		} else {
			return asociarEstablecimientoTemporal(initForm);
		}
	}

	@Override
	public String getButtonsText(InitForm form) {
		StringBuilder buffer = new StringBuilder();
		if (!form.isIdentificadorEmpty()) {
			buffer.append("R");
		}
		buffer.append(form.getProcedureCod());
		return buffer.toString();
	}

}
