package com.rjconsultores.ventaboletos.web.gui.controladores.catalogos;

import java.util.Calendar;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OCDParam;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.OCDParamService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("editarOCDParamController")
@Scope("prototype")
public class EditarOCDParamController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private OCDParamService ocdParamService;
		
	@Autowired
	private EmpresaService empresaService;
	
	private OCDParam ocdParamCorrente;
	
	private MyListbox ocdParamList;
	
	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;

	private Textbox txtDiasPagar;
	private Textbox txtPenalizacion;
	
	private Button btnApagar;
	private Checkbox chkOCDDefault;

	private static Logger log = Logger.getLogger(EditarOCDParamController.class);
	
	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {		
		
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		
		super.doAfterCompose(comp);
		
		ocdParamCorrente = (OCDParam) Executions.getCurrent().getArg().get("ocdParamCorrente");
		ocdParamList = (MyListbox) Executions.getCurrent().getArg().get("ocdParamList");
		chkOCDDefault.setChecked(ocdParamCorrente.getIndOCDDefault() == null ? false : ocdParamCorrente.getIndOCDDefault());
		
		if (ocdParamCorrente.getOcdparamId() == null)
			btnApagar.setVisible(Boolean.FALSE);
				
	}

	public void onClick$btnApagar(Event ev) throws InterruptedException {
		try {
            int resp = Messagebox.show(
                    Labels.getLabel("editarOCDParamController.MSG.borrarPergunta"),
                    Labels.getLabel("editarOCDParamController.window.title"),
                    Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

            if (resp == Messagebox.YES) {

            	ocdParamService.borrar(ocdParamCorrente);

                Messagebox.show(
                        Labels.getLabel("editarOCDParamController.MSG.borrarOK"),
                        Labels.getLabel("editarOCDParamController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);

                closeWindow();
            } 
        } catch (Exception ex) {
            log.error(ex);
        }
		
	}
	
	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		
		cmbEmpresa.getValue();
		boolean isSuscribir = false;
		
		try{
						
			ocdParamCorrente.setActivo(true);
			ocdParamCorrente.setFecmodif(Calendar.getInstance().getTime());
			ocdParamCorrente.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			ocdParamCorrente.setIndOCDDefault(chkOCDDefault.isChecked());
			
			if (ocdParamCorrente.getOcdparamId() == null){
				isSuscribir = true;
			}
			if(ocdParamService.suscribirActualizar(ocdParamCorrente) == null){
				Messagebox.show(
						Labels.getLabel("editarOCDParamController.MSG.empresaJaCadastrada"),
						Labels.getLabel("editarOCDParamController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;
			}
			
			if (isSuscribir){
				ocdParamList.addItemNovo(ocdParamCorrente);
			} else {
				ocdParamList.updateItem(ocdParamCorrente);
			}
						
			Messagebox.show(
					Labels.getLabel("editarOCDParamController.MSG.suscribirOK"),
					Labels.getLabel("editarOCDParamController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();
			
		}catch (Exception ex) {
			log.error("editarOCDParamController: " + ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarOCDParamController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
		
	}

	public Textbox getTxtDiasPagar() {
		return txtDiasPagar;
	}

	public void setTxtDiasPagar(Textbox txtDiasPagar) {
		this.txtDiasPagar = txtDiasPagar;
	}

	public Textbox getTxtPenalizacion() {
		return txtPenalizacion;
	}

	public void setTxtPenalizacion(Textbox txtPenalizacion) {
		this.txtPenalizacion = txtPenalizacion;
	}

	public OCDParam getOcdParamCorrente() {
		return ocdParamCorrente;
	}

	public void setOcdParamCorrente(OCDParam ocdParamCorrente) {
		this.ocdParamCorrente = ocdParamCorrente;
	}

	public Checkbox getChkOCDDefault() {
		return chkOCDDefault;
	}

	public void setChkOCDDefault(Checkbox chkOCDDefault) {
		this.chkOCDDefault = chkOCDDefault;
	}	
}