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

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 com.rjconsultores.ventaboletos.entidad.CasetaPeaje;
import com.rjconsultores.ventaboletos.service.CasetaPeajeService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.menu.item.tarifas.constantes.ConstantesGenericas;

@Controller("editarCasetaPeajeController")
@Scope("prototype")
@SuppressWarnings("serial")
public class EditarCasetaPeajeController extends MyGenericForwardComposer {

	@Autowired
	private CasetaPeajeService casetaPeajeService;
	private CasetaPeaje casetaPeaje;
	private MyListbox casetaPeajeList;
	private Button btnApagar;
	private MyTextbox descricaoPracaPedagio;
	private MyTextboxDecimal quantiaIda;
	private MyTextboxDecimal quantiaVolta;
	private Logger logger = Logger.getLogger(this.getClass());
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		
		casetaPeaje = (CasetaPeaje) Executions.getCurrent().getArg().get("casetaPeaje");
		casetaPeajeList = (MyListbox) Executions.getCurrent().getArg().get("casetaPeajeList");
		
		if(casetaPeaje.getCasetaPeajeId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		}
		
		carregarValores(casetaPeaje);
		
		descricaoPracaPedagio.focus();
	}
	
    private void carregarValores(CasetaPeaje casetaPeaje) {
		if(casetaPeaje != null) {
			quantiaIda.setValue(casetaPeaje.getImporteIda() != null ? casetaPeaje.getImporteIda().toString().replace(".", ",") : "0,0");
			quantiaVolta.setValue(casetaPeaje.getImporteVuelta() != null ? casetaPeaje.getImporteVuelta().toString().replace(".", ",") : "0,0");
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		descricaoPracaPedagio.getValue();

		try {
			Boolean pracaPedagioValida = casetaPeajeService.validarDescricaoCasetaPeaje(casetaPeaje);

			if (pracaPedagioValida) {
				if (casetaPeaje.getCasetaPeajeId() == null) {
					casetaPeaje.setImporteIda(quantiaIda.getValueDecimal());
					casetaPeaje.setImporteVuelta(quantiaVolta.getValueDecimal());
					casetaPeajeService.suscribir(casetaPeaje);
					casetaPeajeList.addItemNovo(casetaPeaje);
				} else {
					casetaPeaje.setImporteIda(quantiaIda.getValueDecimal());
					casetaPeaje.setImporteVuelta(quantiaVolta.getValueDecimal());
					casetaPeajeService.actualizacion(casetaPeaje);
					casetaPeajeList.updateItem(casetaPeaje);
				}

				Messagebox.show(
						Labels.getLabel("editarPracaPedagioController.MSG.suscribirOK"),
						Labels.getLabel("editarPracaPedagioController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				closeWindow();
			} else {
				Messagebox.show(
						Labels.getLabel(ConstantesGenericas.MSG_EXISTE_REGISTRO),
						Labels.getLabel("editarPracaPedagioController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

		} catch (Exception ex) {
			logger.error("editarPracaPedagioController: " + ex);
			Messagebox.show(
					Labels.getLabel(ConstantesGenericas.MSG_ERROR),
					Labels.getLabel("editarPracaPedagioController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}
    
    public void onClick$btnApagar(Event ev) throws InterruptedException {
    	
        int opcao = Messagebox.show(
                Labels.getLabel("editarPracaPedagioController.btnFechar.MSG.Deseja.Borrar"),
                Labels.getLabel("editarPracaPedagioController.window.title"),
                Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
        
        if (opcao == Messagebox.YES) {
        	casetaPeajeService.borrar(casetaPeaje);
        	casetaPeajeList.removeItem(casetaPeaje);        	
        }
        
        Messagebox.show(
                Labels.getLabel("editarPracaPedagioController.btnFechar.MSG.borrarOK"),
                Labels.getLabel("editarPracaPedagioController.window.title"),
                Messagebox.OK, Messagebox.INFORMATION);

        closeWindow();
        
    }

	public MyTextbox getDescricaoPracaPedagio() {
		return descricaoPracaPedagio;
	}

	public void setDescricaoPracaPedagio(MyTextbox descricaoPracaPedagio) {
		this.descricaoPracaPedagio = descricaoPracaPedagio;
	}

	public MyTextboxDecimal getQuantiaIda() {
		return quantiaIda;
	}

	public void setQuantiaIda(MyTextboxDecimal quantiaIda) {
		this.quantiaIda = quantiaIda;
	}

	public MyTextboxDecimal getQuantiaVolta() {
		return quantiaVolta;
	}

	public void setQuantiaVolta(MyTextboxDecimal quantiaVolta) {
		this.quantiaVolta = quantiaVolta;
	}

	public CasetaPeaje getCasetaPeaje() {
		return casetaPeaje;
	}

	public void setCasetaPeaje(CasetaPeaje casetaPeaje) {
		this.casetaPeaje = casetaPeaje;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

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