/*
 * ESTE COMPONENTE FUE REALIZADO BAJO LA METODOLOGÍA DE DESARROLLO
 * DE FUNERALES MODERNOS Y SE ENCUENTRA PROTEGIDO
 * POR LAS LEYES DE DERECHOS DE AUTOR.
 * @author Jorge Galvez
 * Funerales Modernos 2015
*/
package sv.com.fm.web.ui.catalogos;

import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang.StringUtils;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.ForwardEvent;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import sv.com.fm.business.dto.GenericResponse;
import sv.com.fm.business.ejb.GestorCatalogosBeanLocal;
import sv.com.fm.business.entity.Carroza;
import sv.com.fm.business.exception.FmBusinessRolledbackException;
import sv.com.fm.business.exception.FmWebException;
import sv.com.fm.business.exception.ServiceLocatorException;
import sv.com.fm.business.util.Constants;
import sv.com.fm.business.util.ServiceLocator;
import sv.com.fm.web.ui.util.BaseController;
import sv.com.fm.web.ui.util.MensajeMultilinea;

/**
 *
 * @author Jorge Galvez
 */
public class CarrozaMttoCtrl extends BaseController {
     //Componentes ZUL
    protected Window carrozaMttoWindow;
    protected Button btnSaveNewCarroza;
    protected Button btnCleanMttoCarroza;
    protected Button btnCloseMttoCarroza;
    protected Textbox txtDescripcionCarroza;
    protected Checkbox checkEstadoCarroza;
    //Componentes de Negocio
    private static final long serialVersionUID = -6102616129515843465L;
    private static final transient Logger logger = Logger.getLogger(CarrozaMttoCtrl.class.getCanonicalName());
    private ServiceLocator serviceLocator;
    private GestorCatalogosBeanLocal catalogoBean;
    private GestorCarrozaCtrl carrozaListaCtrl;
    private Carroza carrozaSelected;
    private Integer accion;

    public CarrozaMttoCtrl() {
        logger.log(Level.INFO, "[CarrozaMttoCtrl]INIT");
        try {
            serviceLocator = ServiceLocator.getInstance();
            catalogoBean = serviceLocator.getService(Constants.JNDI_CATALOGOS_BEAN);
        } catch (ServiceLocatorException ex) {
            logger.log(Level.SEVERE, ex.getLocalizedMessage());
            ex.printStackTrace();
        }
    }

    public void onCreate$carrozaMttoWindow(Event event) throws Exception {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][onCreate$carrozaMttoWindow]");
        try {
            doOnCreateCommon(this.carrozaMttoWindow, event);
            MensajeMultilinea.doSetTemplate();
            if (this.args.containsKey("gestorCarrozaCtrl")) {
                carrozaListaCtrl = (GestorCarrozaCtrl) this.args.get("gestorCarrozaCtrl");
            } else {
                carrozaListaCtrl = null;
            }
            if (this.args.containsKey("accion")) {
                accion = (Integer) this.args.get("accion");
            } else {
                accion = Constants.ACCION_MANTTO_NEW;
            }
            if (this.args.containsKey("carrozaSelected")) {
                carrozaSelected = (Carroza) this.args.get("carrozaSelected");
            } else {
                carrozaSelected = new Carroza();
            }
            cargarDatosIniciales();
            carrozaMttoWindow.doModal();
            verificarEstadoBotones();
        } catch (Exception e) {
            logger.log(Level.SEVERE, e.getLocalizedMessage());
            e.printStackTrace();
        }
    }

    private void cargarDatosIniciales() {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][cargarDatosIniciales]");
        Boolean checked;
        Boolean optTodo = Boolean.FALSE;
        Boolean optClave = Boolean.FALSE;
        try {
            if (carrozaSelected != null) {
                txtDescripcionCarroza.setValue(carrozaSelected.getDescripcionCarroza());
                checked = (accion!=null && accion==Constants.ACCION_MANTTO_NEW) ? Boolean.TRUE : (carrozaSelected.getEstadoRegistro()!=null?carrozaSelected.getEstadoRegistro():Boolean.FALSE);
                checkEstadoCarroza.setChecked(checked);
            }
            optTodo = (accion!=null && accion == Constants.ACCION_MANTTO_VER) ? Boolean.TRUE : Boolean.FALSE;
            optClave = (accion!=null && accion == Constants.ACCION_MANTTO_NEW) ? Boolean.FALSE : Boolean.TRUE;
            txtDescripcionCarroza.setDisabled(optTodo);
            checkEstadoCarroza.setDisabled(optTodo);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void verificarEstadoBotones() {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][verificarEstadoBotones]");
        Boolean opt = Boolean.FALSE;
        try {
            if (accion != null) {
                if (accion == Constants.ACCION_MANTTO_VER) {
                    btnSaveNewCarroza.setDisabled(!opt);
                    btnCleanMttoCarroza.setDisabled(!opt);
                    btnCloseMttoCarroza.setDisabled(opt);
                } else {
                    btnSaveNewCarroza.setDisabled(opt);
                    btnCleanMttoCarroza.setDisabled(opt);
                    btnCloseMttoCarroza.setDisabled(opt);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onClick$btnSaveNewCarroza(ForwardEvent event) throws InterruptedException {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][onClick$btnSaveNewCarroza]");
        GenericResponse respuesta;
        Boolean isSave;
        try {
            if (validarCampos()) {
                if (carrozaSelected == null) {
                    carrozaSelected = new Carroza();
                }
                carrozaSelected.setDescripcionCarroza(txtDescripcionCarroza.getValue());
                carrozaSelected.setEstadoRegistro(checkEstadoCarroza.isChecked());
                carrozaSelected.setCodigoEmpleadoUsuario(getUserLogin().getUsuario());
                carrozaSelected.setFechaEvento(new Date());
                isSave = (accion != null && accion == Constants.ACCION_MANTTO_MODIFY) ? Boolean.FALSE : Boolean.TRUE;
                respuesta = catalogoBean.saveOrModifyEntity(carrozaSelected, isSave);
                if (respuesta != null && respuesta.getCodigoRespuesta().intValue() == Constants.CODE_OPERATION_OK.intValue()) {
                    if(isSave){
                        carrozaListaCtrl.loadCarrozas(Constants.CARGA_BASE_FECHA_DESC);
                    }else{
                        carrozaListaCtrl.loadCarrozas(Constants.CARGA_BASE_NOMBRE);
                    }
                    carrozaMttoWindow.onClose();
                    MensajeMultilinea.show(respuesta.getMensajeRespuesta(), Constants.MENSAJE_TIPO_INFO);
                } else {
                    MensajeMultilinea.show("Error al ejecutar la operación!!", Constants.MENSAJE_TIPO_ERROR);
                }
            }
        } catch (FmWebException fwe) {
            MensajeMultilinea.show(fwe.getMensaje(), Constants.MENSAJE_TIPO_ALERTA);
        } catch (FmBusinessRolledbackException fbe) {
            MensajeMultilinea.show(fbe.getMensaje(), Constants.MENSAJE_TIPO_ERROR);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private Boolean validarCampos() throws FmWebException {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][validarCampos]");
        Boolean resp = Boolean.FALSE;
        try {
            if (StringUtils.isBlank(txtDescripcionCarroza.getValue())) {
                throw new FmWebException(Constants.CODE_OPERATION_EXCEPTION, "Ingrese una descripcion de la carroza a guardar!!");
            } 
            resp = Boolean.TRUE;
        } catch (FmWebException fwe) {
            throw new FmWebException(Constants.CODE_OPERATION_EXCEPTION, fwe.getMensaje());
        } catch (Exception e) {
            throw new FmWebException(Constants.CODE_OPERATION_EXCEPTION, "Se produjo una excepción, favor comunicarse con el administrador del sistema!!");
        }
        return resp;
    }

    public void onClick$btnCleanMttoCarroza(ForwardEvent event) throws InterruptedException {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][onClick$btnCleanMttoCarroza]");
        try {
            cargarDatosIniciales();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onClick$btnCloseMttoCarroza(ForwardEvent event) throws InterruptedException {
        logger.log(Level.INFO, "[CarrozaMttoCtrl][onClick$btnCloseMttoCarroza]");
        try {
            carrozaMttoWindow.onClose();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}