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

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.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.util.Clients;
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.Estado;
import com.rjconsultores.ventaboletos.entidad.FiscalImpressora;
import com.rjconsultores.ventaboletos.entidad.FiscalImpressoraEstado;
import com.rjconsultores.ventaboletos.service.EstadoService;
import com.rjconsultores.ventaboletos.service.FiscalImpressoraEstadoService;
import com.rjconsultores.ventaboletos.service.FiscalImpressoraService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("editarFiscalImpressoraController")
@Scope("prototype")
public class EditarFiscalImpressoraController extends MyGenericForwardComposer {
	private static final long serialVersionUID = 1L;
	
	private static Logger log = LogManager.getLogger(EditarFiscalImpressoraController.class);

	@Autowired
	private FiscalImpressoraService fiscalImpressoraService;
	
	@Autowired
	private FiscalImpressoraEstadoService fiscalImpressoraEstadoService;

	@Autowired
	private EstadoService estadoService;
	
	private MyListbox fiscalImpressoraList;
	private List<Estado> lsEstado;
	
	private Textbox txtMarca;
	private Textbox txtModelo;
	private Textbox txtNumserie20;
	private Textbox txtVersionsb;
	private Textbox txtCniee;
	private MyListbox estadosList;
	private Combobox cmbEstadoPermitir;
	private Combobox cmbEstado;
	private Combobox cmbEmpresa;
	private Combobox cmbEstadoLacracao;
	private Checkbox chkBloqueoECF;
	
	private FiscalImpressora fiscalImpressora;

	private List<Empresa> lsEmpresas;
	private List<FiscalImpressoraEstado> lsEstadosPermitidos;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		
		fiscalImpressora = new FiscalImpressora();

		lsEstado = estadoService.obtenerTodos();
		
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsEstadosPermitidos = new ArrayList<FiscalImpressoraEstado>();
		
		Integer fiscalimpressoraId = (Integer) Executions.getCurrent().getArg().get("fiscalimpressoraId");
		if(fiscalimpressoraId != null && fiscalimpressoraId > 0) {
			fiscalImpressora = fiscalImpressoraService.obtenerID((Integer)Executions.getCurrent().getArg().get("fiscalimpressoraId"));
			lsEstadosPermitidos = fiscalImpressoraEstadoService.retornaEstadosFiscalImpressora(fiscalImpressora) ;
		}
		
		estadosList.setData(lsEstadosPermitidos);
		
		fiscalImpressoraList = (MyListbox) Executions.getCurrent().getArg().get("fiscalImpressoraList");
		
        txtCniee.focus();
	}

	public FiscalImpressora getFiscalImpressora() {
		return fiscalImpressora;
	}

	public void setFiscalImpressora(FiscalImpressora fiscalImpressora) {
		this.fiscalImpressora = fiscalImpressora;
	}
	
	public void onClick$btnSalvar() {
		try {
			txtCniee.getText();
			fiscalImpressoraService.actualizacion(getFiscalImpressora());
			
			if (cmbEstado.getSelectedItem() == null || cmbEmpresa.getSelectedItem() == null || cmbEstadoLacracao.getSelectedItem() == null) {
				chkBloqueoECF.setChecked(true);
				getFiscalImpressora().setIndBloqueaECF(true);
			}
			
			if(fiscalImpressoraList != null) {
				fiscalImpressoraList.updateItem(getFiscalImpressora());
			}
			
			Messagebox.show(
					Labels.getLabel("busquedaFiscalImpressoraController.MSG.suscribirOK"),
					Labels.getLabel("busquedaFiscalImpressoraController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			
			closeWindow();
		} catch (Exception ex) {
			log.info(ex.getLocalizedMessage());
			Clients.alert(ex.getLocalizedMessage(),
					Labels.getLabel("busquedaFiscalImpressoraController.window.title"), Messagebox.INFORMATION);
		}
	}
	
	public void onClick$btnAdicionarEstado() throws InterruptedException {
		
		try {

			if(cmbEstadoPermitir.getSelectedItem() != null){
				Estado estado = (Estado) cmbEstadoPermitir.getSelectedItem().getValue();
				FiscalImpressoraEstado entidad = new FiscalImpressoraEstado();
				entidad.setEstado(estado);
				entidad.setFiscalImpressora(fiscalImpressora);
				entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				entidad.setFecmodif(Calendar.getInstance().getTime());
				entidad.setActivo(Boolean.TRUE);	
				
				boolean existe = false;
				for (Iterator<FiscalImpressoraEstado> iterator = estadosList.getListData().listIterator(); iterator.hasNext();) {
					FiscalImpressoraEstado fiscalImpressoraEstado =  iterator.next();
					if (fiscalImpressoraEstado.getEstado().equals(entidad.getEstado())) {
						existe = true;
						break;
					}
				}
				
				if (!existe) {
					estadosList.updateItem(entidad);
					fiscalImpressoraEstadoService.suscribir(entidad);
				}
				
			}
			
		} catch (Exception e) {
			log.error(e.getLocalizedMessage(), e);
			Messagebox.show(
					e.getMessage(),
					Labels.getLabel("busquedaFiscalImpressoraController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
			
	}
	
	public void onClick$btnRetirarEstado() throws InterruptedException {

		try {
			FiscalImpressoraEstado e = (FiscalImpressoraEstado) estadosList.getSelected();
			if (e != null) {
				
				fiscalImpressoraEstadoService.borrar(e);
				estadosList.removeItem(e);
			}

		} catch (Exception e) {
			log.error(e.getLocalizedMessage(), e);
			Messagebox.show(
					e.getMessage(),
					Labels.getLabel("busquedaFiscalImpressoraController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}

	}

	public Textbox getTxtNumserie20() {
		return txtNumserie20;
	}

	public void setTxtNumserie20(Textbox txtNumserie20) {
		this.txtNumserie20 = txtNumserie20;
	}

	public List<Estado> getLsEstado() {
		return lsEstado;
	}

	public void setLsEstado(List<Estado> lsEstado) {
		this.lsEstado = lsEstado;
	}

	public MyListbox getFiscalImpressoraList() {
		return fiscalImpressoraList;
	}

	public void setFiscalImpressoraList(MyListbox fiscalImpressoraList) {
		this.fiscalImpressoraList = fiscalImpressoraList;
	}

	public Textbox getTxtMarca() {
		return txtMarca;
	}

	public Combobox getCmbEstado() {
		return cmbEstado;
	}

	public void setCmbEstado(Combobox cmbEstado) {
		this.cmbEstado = cmbEstado;
	}

	public void setTxtMarca(Textbox txtMarca) {
		this.txtMarca = txtMarca;
	}

	public Textbox getTxtModelo() {
		return txtModelo;
	}

	public void setTxtModelo(Textbox txtModelo) {
		this.txtModelo = txtModelo;
	}

	public Textbox getTxtVersionsb() {
		return txtVersionsb;
	}

	public void setTxtVersionsb(Textbox txtVersionsb) {
		this.txtVersionsb = txtVersionsb;
	}

	public Textbox getTxtCniee() {
		return txtCniee;
	}

	public void setTxtCniee(Textbox txtCniee) {
		this.txtCniee = txtCniee;
	}

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

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

	public MyListbox getEstadosList() {
		return estadosList;
	}

	public void setEstadosList(MyListbox estadosList) {
		this.estadosList = estadosList;
	}

	public Combobox getCmbEstadoPermitir() {
		return cmbEstadoPermitir;
	}

	public void setCmbEstadoPermitir(Combobox cmbEstadoPermitir) {
		this.cmbEstadoPermitir = cmbEstadoPermitir;
	}

	public List<FiscalImpressoraEstado> getLsEstadosPermitidos() {
		return lsEstadosPermitidos;
	}

	public void setLsEstadosPermitidos(List<FiscalImpressoraEstado> lsEstadosPermitidos) {
		this.lsEstadosPermitidos = lsEstadosPermitidos;
	}
	
}
