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

import java.util.ArrayList;
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.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FiscalFormapagoEmpresa;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.FiscalImpressoraService;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.impl.FiscalImpressoraServiceImpl.TipoFormaPagamento;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("editarFormapagoEmpresaController")
@Scope("prototype")
public class EditarFormapagoEmpresaController extends MyGenericForwardComposer  {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	@Autowired
	private FiscalImpressoraService fiscalImpressoraService;
	
	@Autowired
	private FormaPagoService formaPagoService;
	
	private FiscalFormapagoEmpresa formapagoEmpresa;
	private MyListbox formapagoEmpresaList;
	
	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;
	
	private Combobox cmbTipoformapago;
	private List<String> lsTipoformapago = new ArrayList<String>();
	
	private Textbox txtDescricao;
	
	private Combobox cmbTipoformapagoTotalBus;
	private List<FormaPago> lsTipoformapagoTotalBus = new ArrayList<FormaPago>();
	
	private Button btnApagar;
	private Radio radVinculado;
	private static Logger log = Logger.getLogger(EditarFormapagoEmpresaController.class);
	
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {		

		for(TipoFormaPagamento tipo : TipoFormaPagamento.values()){
			lsTipoformapago.add(tipo.name());	
		}
		
		lsTipoformapagoTotalBus = formaPagoService.obtenerTodos();
		
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		
		
		super.doAfterCompose(comp);
		
		formapagoEmpresa = (FiscalFormapagoEmpresa) Executions.getCurrent().getArg().get("formapagoEmpresa");
		formapagoEmpresaList = (MyListbox) Executions.getCurrent().getArg().get("formapagoEmpresaList");
		
		if (formapagoEmpresa.getFiscalformapagoempresaId() == null){
			btnApagar.setVisible(Boolean.FALSE);
		}else{
			radVinculado.setSelected( (formapagoEmpresa.getIndVinculado() == null) ?false:formapagoEmpresa.getIndVinculado());
		}
				
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		
		cmbEmpresa.getValue();
		cmbTipoformapago.getValue();
		cmbTipoformapagoTotalBus.getValue();
		
		try{
			
			Comboitem itemFormapagoTotalBus = cmbTipoformapagoTotalBus.getSelectedItem();
			if(itemFormapagoTotalBus != null){
				FormaPago fpTotalBus = (FormaPago) itemFormapagoTotalBus.getValue();
				formapagoEmpresa.setFormaPago(fpTotalBus);
			}
			
			Comboitem itemTipoFormapago = cmbTipoformapago.getSelectedItem();
			if(itemTipoFormapago != null){
				String tipoFormapago = (String) itemTipoFormapago.getValue();
				formapagoEmpresa.setTipoformapago(tipoFormapago);
			}
			
			
			formapagoEmpresa.setIndVinculado(radVinculado.isChecked());
			formapagoEmpresa.setDescricao(txtDescricao.getText());
			fiscalImpressoraService.suscribirActualizarFormapagoEmpresa(formapagoEmpresa);
			formapagoEmpresaList.updateItem(formapagoEmpresa);
			
			
			Messagebox.show(
					Labels.getLabel("editarFormapagoEmpresaController.MSG.suscribirOK"),
					Labels.getLabel("editarFormapagoEmpresaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

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

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

            if (resp == Messagebox.YES) {

            		fiscalImpressoraService.borrarFormapagoEmpresa(formapagoEmpresa);

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

                    formapagoEmpresaList.removeItem(formapagoEmpresa);

                    closeWindow();               
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }
	
	public FiscalFormapagoEmpresa getFormapagoEmpresa() {
		return formapagoEmpresa;
	}

	public void setFormapagoEmpresa(FiscalFormapagoEmpresa formapagoEmpresa) {
		this.formapagoEmpresa = formapagoEmpresa;
	}

	public MyListbox getFormapagoEmpresaList() {
		return formapagoEmpresaList;
	}

	public void setFormapagoEmpresaList(MyListbox formapagoEmpresaList) {
		this.formapagoEmpresaList = formapagoEmpresaList;
	}

	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;
	}

	public Combobox getCmbTipoformapago() {
		return cmbTipoformapago;
	}

	public void setCmbTipoformapago(Combobox cmbTipoformapago) {
		this.cmbTipoformapago = cmbTipoformapago;
	}

	public List<String> getLsTipoformapago() {
		return lsTipoformapago;
	}

	public void setLsTipoformapago(List<String> lsTipoformapago) {
		this.lsTipoformapago = lsTipoformapago;
	}

	public Textbox getTxtDescricao() {
		return txtDescricao;
	}

	public void setTxtDescricao(Textbox txtDescricao) {
		this.txtDescricao = txtDescricao;
	}

	public Combobox getCmbTipoformapagoTotalBus() {
		return cmbTipoformapagoTotalBus;
	}

	public void setCmbTipoformapagoTotalBus(Combobox cmbTipoformapagoTotalBus) {
		this.cmbTipoformapagoTotalBus = cmbTipoformapagoTotalBus;
	}

	public List<FormaPago> getLsTipoformapagoTotalBus() {
		return lsTipoformapagoTotalBus;
	}

	public void setLsTipoformapagoTotalBus(List<FormaPago> lsTipoformapagoTotalBus) {
		this.lsTipoformapagoTotalBus = lsTipoformapagoTotalBus;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}
	
	public boolean desabilitaComboFormaPago(){
		if ( (formapagoEmpresa.getTipoformapago() != null) && (formapagoEmpresa.getTipoformapago().equals(TipoFormaPagamento.CUSTOM.toString())) ){
			return false;
		}
		return true;
	}
	
	public void onChange$cmbTipoformapago(Event ev) {
		
		Comboitem ciTipoformapago = cmbTipoformapago.getSelectedItem();
		
		if (ciTipoformapago != null) {
			String  tipoFormaPago = (String) ciTipoformapago.getValue();
			
			formapagoEmpresa.setFormaPago(null);
			
			if (tipoFormaPago.equals(TipoFormaPagamento.CUSTOM.toString())){
				cmbTipoformapagoTotalBus.setDisabled(false);
			}else{
				cmbTipoformapagoTotalBus.setDisabled(true);
			}
		}

	}
}
