package com.ejie.ab63.service.procedimientos;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

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

/**
 * 
 *  
 *
 */
public class ModificacionActividadProcedureActions extends BaseProcedureActions {

	private static final Log logger = LogFactory.getLog(ModificacionActividadProcedureActions.class);

	protected ModificacionActividadProcedureActions(DetailExpedienteService detailExpedienteService) {
		super(Constantes.PROCEDIMIENTO_MODIFICACIONES_ACTIVIDAD, detailExpedienteService);
	}

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

	@Override
	public DatosDirecciones findDireccioneEstablecimiento(InitForm form) {
		DatosDireccionesService datosDireccionesService = this.getDetailExpedienteService()
				.getDatosDireccionesService();
		DatosDirecciones direcciones = datosDireccionesService.findEstablecimientoExpediente(form.getIdExpediente());
		if (direcciones == null || direcciones.getIdDireccion() == null) {
			Establecimiento establecimientoExpediente = findEstablecimiento(form);
			Establecimiento filter = new Establecimiento(
					Integer.valueOf(establecimientoExpediente.getIdEstablecimientoPadre()));
			direcciones = datosDireccionesService.findDireccionEstablecimiento(filter,
					Constantes.ID_DIRECCION_ACTIVIDAD);

			direcciones.getDatosTerceros().setIdTercero(form.getIdTerceroTitular());
			direcciones.setEstablecimiento(establecimientoExpediente.getDescrNombre());
			direcciones.setIdentificadorEstablecimiento(establecimientoExpediente.getIdentificadorSolicitud());
			datosDireccionesService.add(direcciones);
			direcciones = datosDireccionesService.findEstablecimientoExpediente(form.getIdExpediente());
		}

		return direcciones;
	}

	@Override
	public Boolean isEnableSaveExpediente(InitForm form) {
		return super.isEnableSaveExpediente(form) && isEnableExecuteAction(form);
	}

	@Override
	public Boolean isEnableExecuteAction(InitForm form) {
		Establecimiento estExpediente = getDetailExpedienteService().getEstablecimientoService()
				.findEstablecimientoByIdExpediente(form.getIdExpediente());
		return estExpediente.getIdEstablecimiento() != null && estExpediente.getFechaBaja() == null;
	}

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

	private Map<String, String> processModicaciones(InitForm form) {
		HashMap<String, String> data = new HashMap<String, String>();
		this.getDetailExpedienteService().getEstablecimientoService().updateChangesExpediente(form);

		Establecimiento establecimiento = this.getDetailExpedienteService().getEstablecimientoService()
				.findByIdenticadorEstablecimiento(form.getIdentificadorEstablecimiento());

		// publicamos el nuevo alta en AA80T
		ParametrosConfig parametrosConfigFind = new ParametrosConfig();
		parametrosConfigFind.setDescripcion(Constantes.ACTIVADA_PUBLICACION_AA80T);
		ParametrosConfig parametrosConfig = this.getDetailExpedienteService().getParametrosConfigService()
				.find(parametrosConfigFind);

		if (parametrosConfig.getValor() == 1) {
			try {
				this.getDetailExpedienteService().getGenerarPublicacionService()
						.generarPublicacion(establecimiento.getIdEstablecimiento());
			} catch (Exception e) {
				ModificacionActividadProcedureActions.logger
						.error("Error en el proceso de modificacion del establecimiento "
								+ establecimiento.getIdEstablecimiento());

				data.put(Constantes.KEY_AJAX_ERROR, "errorGenerico");
				return data;
			}
		}

		data.put(Constantes.KEY_AJAX_CALLBACK, "successUpdateEst");
		data.put(Constantes.KEY_AJAX_MESSAGE, "datos_guardados_OK");

		return data;
	}

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

	@Override
	public Boolean isEnableShowUbicacionEstablecimiento(InitForm form) {
		return false;
	}

}
