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

import java.math.BigDecimal;
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.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.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Longbox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.EmpresaTrocoSimples;
import com.rjconsultores.ventaboletos.service.EmpresaTrocoSimplesService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.gui.controladores.catalogos.BusquedaEmpresaTrocoSimplesController;
import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("editarEmpresaTrocoSimplesController")
@Scope("prototype")
public class EditarEmpresaTrocoSimplesController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	private static Logger log = LogManager.getLogger(EditarEmpresaTrocoSimplesController.class);

	@Autowired
	private EmpresaTrocoSimplesService trocoService;

	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;
	private Textbox txtRazaoSocial;
	private Textbox txtNomeFantasia;
	private Longbox txtCNPJ;
	private Textbox txtTelefone;
	private Textbox txtEndereco;
	private Textbox txtValorSugerido;
	private Textbox txtToken;

	private EmpresaTrocoSimples empresaTroco;
	private BusquedaEmpresaTrocoSimplesController busquedaEmpresaTrocoSimples;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		empresaTroco = (EmpresaTrocoSimples) Executions.getCurrent().getArg().get("empresaTrocoSimples");
		busquedaEmpresaTrocoSimples = (BusquedaEmpresaTrocoSimplesController) Executions.getCurrent().getArg().get("busquedaEmpresaTrocoSimples");
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();

		super.doAfterCompose(comp);
		preencherTela();
	}

	private void preencherTela() {
		if (empresaTroco != null && empresaTroco.getEmpresa() != null) {
			cmbEmpresa.setText(empresaTroco.getEmpresa().getNombempresa());
			txtRazaoSocial.setText(empresaTroco.getRazaoSocial());
			txtNomeFantasia.setText(empresaTroco.getNomeFantasia());
			txtCNPJ.setText(empresaTroco.getCnpj());
			txtTelefone.setText(empresaTroco.getTelefone());
			txtEndereco.setText(empresaTroco.getEndereco());
			txtValorSugerido.setText(empresaTroco.getValorSugerirTroco() == null ? "" : empresaTroco.getValorSugerirTroco().toString());
			txtToken.setText(empresaTroco.getTokenEmpresa());
		}
	}

	public void onClick$btnSalvar(Event ev) {
		cmbEmpresa.getValue();
		txtCNPJ.getValue();
		txtToken.getValue();
		try {
			if (empresaTroco != null) {
				Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
				Empresa empresa = (Empresa) itemEmpresa.getValue();
				
				empresaTroco.setEmpresa(empresa);
				empresaTroco.setCnpj(txtCNPJ.getText().trim());
				empresaTroco.setNomeFantasia(txtNomeFantasia.getText());
				empresaTroco.setRazaoSocial(txtRazaoSocial.getText());
				empresaTroco.setTelefone(txtTelefone.getText());
				empresaTroco.setEndereco(txtEndereco.getText());
				empresaTroco.setValorSugerirTroco(txtValorSugerido.getText() != null && !txtValorSugerido.getText().isEmpty() ? new BigDecimal(txtValorSugerido.getText()) : null);
				empresaTroco.setTokenEmpresa(txtToken.getText().trim());
				empresaTroco.setActivo(true);

				if (!validaEmpresaTrocoSimplesExistente(empresaTroco)) {
					MensagensUtils.showMessageError("editarEmpresaTrocoSimples.MSG.cadastroExistente", "editarEmpresaTrocoSimples.window.title");
					return;
				}

				empresaTroco = trocoService.suscribirActualizar(empresaTroco);
				MensagensUtils.showMessageExclamation("editarEmpresaTrocoSimples.MSG.suscribirOK", "editarEmpresaTrocoSimples.window.title");
				busquedaEmpresaTrocoSimples.refreshLista();
				this.closeWindow();
			}

		} catch (Exception e) {
			log.error("Erro ao salvar configuração de troco simples: ", e);
			MensagensUtils.showMessageError("editarConvenioController.MSG.erro", "editarEmpresaTrocoSimples.window.title");
		}
	}

	private boolean validaEmpresaTrocoSimplesExistente(EmpresaTrocoSimples empresaTroco) {

		EmpresaTrocoSimples existente = trocoService.buscarEmpresaTrocoSimplesPorEmpresaId(empresaTroco.getEmpresa().getEmpresaId());
		
		if (existente != null && empresaTroco.getEmpresaTrocoSimplesId() == null) {
			return false;
		}
		if(existente != null && !empresaTroco.getEmpresaTrocoSimplesId().equals(existente.getEmpresaTrocoSimplesId())) {
			return false;
		}
		
		return true;
	}

	public void onClick$btnApagar(Event ev) {
		try {
			if (!(empresaTroco != null && empresaTroco.getEmpresaTrocoSimplesId() != null)) {
				return;
			}

			if (Messagebox.YES == MensagensUtils.showMessageQuestion("editarEmpresaTrocoSimples.MSG.borrarPergunta", "editarEmpresaTrocoSimples.window.title")) {
				trocoService.apagar(empresaTroco);
				MensagensUtils.showMessageExclamation("editarConvenioController.MSG.borrarOK", "editarConvenioController.window.title");
				cmbEmpresa.setSelectedIndex(-1);
				empresaTroco = null;
				busquedaEmpresaTrocoSimples.refreshLista();
				this.closeWindow();
			}
			
		} catch (Exception ex) {
			log.error("Erro ao apagar configuração de troco simples: ", ex);
		}
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public EmpresaTrocoSimplesService getTrocoService() {
		return trocoService;
	}

	public void setTrocoService(EmpresaTrocoSimplesService trocoService) {
		this.trocoService = trocoService;
	}

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

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

	public Textbox getTxtRazaoSocial() {
		return txtRazaoSocial;
	}

	public void setTxtRazaoSocial(Textbox txtRazaoSocial) {
		this.txtRazaoSocial = txtRazaoSocial;
	}

	public Textbox getTxtNomeFantasia() {
		return txtNomeFantasia;
	}

	public void setTxtNomeFantasia(Textbox txtNomeFantasia) {
		this.txtNomeFantasia = txtNomeFantasia;
	}

	public Longbox getTxtCNPJ() {
		return txtCNPJ;
	}

	public void setTxtCNPJ(Longbox txtCNPJ) {
		this.txtCNPJ = txtCNPJ;
	}

	public Textbox getTxtTelefone() {
		return txtTelefone;
	}

	public void setTxtTelefone(Textbox txtTelefone) {
		this.txtTelefone = txtTelefone;
	}

	public Textbox getTxtEndereco() {
		return txtEndereco;
	}

	public void setTxtEndereco(Textbox txtEndereco) {
		this.txtEndereco = txtEndereco;
	}

	public Textbox getTxtValorSugerido() {
		return txtValorSugerido;
	}

	public void setTxtValorSugerido(Textbox txtValorSugerido) {
		this.txtValorSugerido = txtValorSugerido;
	}

	public Textbox getTxtToken() {
		return txtToken;
	}

	public void setTxtToken(Textbox txtToken) {
		this.txtToken = txtToken;
	}
}
