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

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
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.WrongValueException;
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.Comboitem;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FiscalTotnaofiscalEmpresa;
import com.rjconsultores.ventaboletos.entidad.TipoEventoExtra;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.FiscalImpressoraService;
import com.rjconsultores.ventaboletos.service.TipoEventoExtraService;
import com.rjconsultores.ventaboletos.service.impl.FiscalImpressoraServiceImpl.TipoTotalizadorNaoFiscal;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

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

	@Autowired
	private FiscalImpressoraService fiscalImpressoraService;
	
	@Autowired
	private TipoEventoExtraService tipoEventoExtraService;
	
	private FiscalTotnaofiscalEmpresa totnaofiscalEmpresa;
	private MyListbox totnaofiscalEmpresaList;
	
	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;
	
	private Combobox cmbTipototalizador;
	private List<String> lsTipototalizador = new ArrayList<String>();
	
	private Combobox cmbTipoEventoExtra;
	private List<TipoEventoExtra> lsTipoEventoExtra;
	
	private Textbox txtIndice;
	private Textbox txtDescricao;
	private Checkbox chkImportarImp;

	private Button btnApagar;
	
	private static Logger log = Logger.getLogger(EditarTotnaofiscalEmpresaController.class);
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {		

		for(TipoTotalizadorNaoFiscal tipo : TipoTotalizadorNaoFiscal.values()){
			lsTipototalizador.add(tipo.name());	
		}
				
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		//obter Tipos de evento extra
		lsTipoEventoExtra = tipoEventoExtraService.obtenerTodos();
		TipoEventoExtra eventoExtra = new TipoEventoExtra();
		//Incluir valor vazio
		eventoExtra.setDescTipoEvento(" ");
		lsTipoEventoExtra.add(eventoExtra);
		//organizar lista apresentada na tela
		Comparator<TipoEventoExtra> comparator = new Comparator<TipoEventoExtra>() {
			@Override
			public int compare(TipoEventoExtra o1, TipoEventoExtra o2) {
				return o1.getDescTipoEvento().compareTo(o2.getDescTipoEvento());
			}
		};
		Collections.sort(lsTipoEventoExtra,comparator); 
		
		super.doAfterCompose(comp);
		
		
		
		totnaofiscalEmpresa = (FiscalTotnaofiscalEmpresa) Executions.getCurrent().getArg().get("totnaofiscalEmpresa");
		totnaofiscalEmpresaList = (MyListbox) Executions.getCurrent().getArg().get("totnaofiscalEmpresaList");
		
		if (totnaofiscalEmpresa.getFiscaltotnaofiscalId() == null){
			btnApagar.setVisible(Boolean.FALSE);
		}else{
			
			TipoTotalizadorNaoFiscal tipoTotalizadorNaoFiscal = TipoTotalizadorNaoFiscal.valueOf(totnaofiscalEmpresa.getTipototalizador());
			cmbTipoEventoExtra.setDisabled(!tipoTotalizadorNaoFiscal.isTemEE());
			
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		cmbEmpresa.getValue();
		cmbTipoEventoExtra.getValue();
		cmbTipototalizador.getValue();
		try{
			
			Comboitem itemTipoEventoExtra = cmbTipoEventoExtra.getSelectedItem();
			if(itemTipoEventoExtra != null && !"".equals(itemTipoEventoExtra.getValue().toString().trim())){
				TipoEventoExtra tipoeventoextra = (TipoEventoExtra) itemTipoEventoExtra.getValue();
				totnaofiscalEmpresa.setTipoeventoextra(tipoeventoextra);
			}else{
				totnaofiscalEmpresa.setTipoeventoextra(null);
			}
			
			Comboitem itemTipototalizador = cmbTipototalizador.getSelectedItem();
			if(itemTipototalizador != null){
				String tipoTotalizadorNaoFiscal = (String) itemTipototalizador.getValue();
				totnaofiscalEmpresa.setTipototalizador(tipoTotalizadorNaoFiscal);
			}
			
			totnaofiscalEmpresa.setDescricao(txtDescricao.getText());

			fiscalImpressoraService.suscribirActualizarTotnaofiscalEmpresa(totnaofiscalEmpresa);
			totnaofiscalEmpresaList.updateItem(totnaofiscalEmpresa);

			
						
			Messagebox.show(
					Labels.getLabel("editarTotnaofiscalEmpresaController.MSG.suscribirOK"),
					Labels.getLabel("editarTotnaofiscalEmpresaController.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) {
			if (ex instanceof WrongValueException){
				throw ((WrongValueException)ex);
			}
			
			log.error("editarTotnaofiscalEmpresaController: " + ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarTotnaofiscalEmpresaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
		
	}

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

            if (resp == Messagebox.YES) {

                	
            		fiscalImpressoraService.borrarTotnaofiscalEmpresa(totnaofiscalEmpresa);

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

                    totnaofiscalEmpresaList.removeItem(totnaofiscalEmpresa);

                    closeWindow();               
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }
	
	public List<TipoEventoExtra> getLsTipoEventoExtra() {		
		return lsTipoEventoExtra;
	}

	public void setLsTipoEventoExtra(List<TipoEventoExtra> lsTipoEventoExtra) {
		this.lsTipoEventoExtra = lsTipoEventoExtra;
	}

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

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	public FiscalTotnaofiscalEmpresa getTotnaofiscalEmpresa() {
		return totnaofiscalEmpresa;
	}

	public void setTotnaofiscalEmpresa(FiscalTotnaofiscalEmpresa totnaofiscalEmpresa) {
		this.totnaofiscalEmpresa = totnaofiscalEmpresa;
	}

	public MyListbox getTotnaofiscalEmpresaList() {
		return totnaofiscalEmpresaList;
	}

	public void setTotnaofiscalEmpresaList(MyListbox totnaofiscalEmpresaList) {
		this.totnaofiscalEmpresaList = totnaofiscalEmpresaList;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public Combobox getCmbTipototalizador() {
		return cmbTipototalizador;
	}

	public void setCmbTipototalizador(Combobox cmbTipototalizador) {
		this.cmbTipototalizador = cmbTipototalizador;
	}

	public List<String> getLsTipototalizador() {
		return lsTipototalizador;
	}

	public void setLsTipototalizador(List<String> lsTipototalizador) {
		this.lsTipototalizador = lsTipototalizador;
	}

	public Combobox getCmbTipoEventoExtra() {
		return cmbTipoEventoExtra;
	}

	public void setCmbTipoEventoExtra(Combobox cmbTipoEventoExtra) {
		this.cmbTipoEventoExtra = cmbTipoEventoExtra;
	}

	public Textbox getTxtIndice() {
		return txtIndice;
	}

	public void setTxtIndice(Textbox txtIndice) {
		this.txtIndice = txtIndice;
	}

	public Textbox getTxtDescricao() {
		return txtDescricao;
	}

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

	public Checkbox getChkImportarImp() {
		return chkImportarImp;
	}

	public void setChkImportarImp(Checkbox chkImportarImp) {
		this.chkImportarImp = chkImportarImp;
	}
	
	public void onChange$cmbTipototalizador(Event ev) {
		Comboitem selectedItem = cmbTipototalizador.getSelectedItem();
		if (selectedItem != null){
			String tipoTotalizador = (String) selectedItem.getValue();
			
			TipoTotalizadorNaoFiscal tipoTotalizadorNaoFiscal = TipoTotalizadorNaoFiscal.valueOf(tipoTotalizador);
			
			totnaofiscalEmpresa.setTipoeventoextra(null);
			cmbTipoEventoExtra.setDisabled(!tipoTotalizadorNaoFiscal.isTemEE());
					
		}
	}
}
