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

import java.util.List;

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.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.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Decimalbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.ClienteCorporativo;
import com.rjconsultores.ventaboletos.entidad.ConvenioTransportadora;
import com.rjconsultores.ventaboletos.entidad.Transportadora;
import com.rjconsultores.ventaboletos.entidad.Voucher;
import com.rjconsultores.ventaboletos.enums.SituacaoVoucher;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.ClienteCorporativoService;
import com.rjconsultores.ventaboletos.service.ConvenioTransportadoraService;
import com.rjconsultores.ventaboletos.service.TransportadoraService;
import com.rjconsultores.ventaboletos.service.VoucherService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Controller("editarVoucherController")
@Scope("prototype")
public class EditarVoucherController extends MyGenericForwardComposer {

	private static final String TITULO = "editarVoucherController.window.title";
	private static final long serialVersionUID = 1L;
	@Autowired
	private VoucherService voucherService;
	
	@Autowired
	private ClienteCorporativoService clienteService;
	
	@Autowired
	private TransportadoraService tranportadoraService;
	
	@Autowired
	private ConvenioTransportadoraService convenioService;

	private Voucher voucher;
	private MyListbox voucherList;
	
	private List<Transportadora> lsTransportadora;
	
	private Datebox txtDataValidade;
	private Label txtCliente;
	private Combobox cmbTransportadora;
	private Decimalbox txtValorTransp;
	private Button btnSalvar;
	private Button btnLegalizar;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		setLsTransportadora(tranportadoraService.obtenerTodos());
		
		super.doAfterCompose(comp);
		
		voucher = (Voucher) Executions.getCurrent().getArg().get("voucher");
		voucherList = (MyListbox) Executions.getCurrent().getArg().get("voucherList");
		
		if(voucher == null) {
			Long voucherId = (Long) Executions.getCurrent().getArg().get("voucherId");
			voucher = voucherService.obtenerID(voucherId);
		}
		
		if( voucher.getClienteCorporativoId() !=null ) {
			Voucher sub = voucher;
			voucher = voucherService.obtenerID(voucher.getVoucherId());
			voucher.setDescOrigem(sub.getDescOrigem());
			voucher.setDescDestino(sub.getDescDestino());
			
			ClienteCorporativo cliente = clienteService.obtenerID(voucher.getClienteCorporativoId());
			txtCliente.setValue(cliente.getNomeClienteCorp());
		}
		
		if( voucher.getSituacaoVoucher().equals(SituacaoVoucher.CANCELADO)) {
			btnSalvar.setVisible(false);
			btnLegalizar.setVisible(false);
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		try {
			
			Comboitem transp = cmbTransportadora.getSelectedItem();
			if( transp != null ) {
				voucher.setTransportadora(((Transportadora)transp.getValue()) );
			}
			
			validaCampos();
			
			voucher = voucherService.actualizacion(voucher);
			voucherList.updateItem(voucher);

			Messagebox.show(
					Labels.getLabel("MSG.suscribirOK"),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();		
		} catch (BusinessException bex) {
			Messagebox.show(
					bex.getMessage(),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.ERROR);			
		} catch (Exception ex) {
			Messagebox.show(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.ERROR);
		}
	}
	
	public void onClick$btnLegalizar(Event ev) throws InterruptedException {
		try {
			Comboitem transp = cmbTransportadora.getSelectedItem();
			if( transp != null ) {
				voucher.setTransportadora(((Transportadora)transp.getValue()) );
			}
			
			validaLegalizacao();
			
			voucher.setStatus(SituacaoVoucher.LEGALIZADO.getValor());
			
			voucher = voucherService.actualizacion(voucher);
			voucherList.updateItem(voucher);

			Messagebox.show(
					Labels.getLabel("MSG.suscribirOK"),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();		
		} catch (BusinessException bex) {
			Messagebox.show(
					bex.getMessage(),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.ERROR);			
		} catch (Exception ex) {
			Messagebox.show(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.ERROR);
		}
	}

	private void validaLegalizacao() throws BusinessException  {
		if ( voucher.getValorLegalizado() == null 
				|| voucher.getValorLicitado() == null 
				|| voucher.getTransportadora() == null ){
			throw new BusinessException("editarVoucherController.MSG.camposObrigatoriosLegalizar");
		}		
	}

	private void validaCampos() throws BusinessException {
		if ( voucher.getDataValidade() == null ){
			throw new BusinessException("editarVoucherController.MSG.camposObrigatorios");
		}		
	}
	
	public void onChange$cmbTransportadora(Event ev) {
		preencheConvenio();
	}

	private void preencheConvenio() {
		ConvenioTransportadora convenio =  null;
		Comboitem transp = cmbTransportadora.getSelectedItem();
		if( transp != null ) {
			
			convenio =  convenioService.buscarPelaTransportadoraId(
											((Transportadora)transp.getValue()).getTransportadoraId());
			
			voucher.setValorLegalizado(convenio.getValor());
			txtValorTransp.setDisabled(true);
		}else {
			txtValorTransp.setDisabled(false);
		}
		
	}

}
