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

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

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FechamentoParamgeral;
import com.rjconsultores.ventaboletos.enuns.BancoLayout;
import com.rjconsultores.ventaboletos.service.FechamentoParamgeralService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

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

	@Autowired
	private FechamentoParamgeralService fechamentoParamgeralService;
	
	private Combobox cmbEmpresa;
	private Combobox cmbBoletoBancoCod;
	private Textbox txtBoletoBancoAgencia;
	private Textbox txtBoletoBancoConta;
	private Textbox txtBoletoBancoContaDigito;
	private Textbox txtBoletoBancoCarteira;
	private Textbox txtBoletoDiasVenc;
	private Textbox txtBoletoJuros;
	private Textbox txtBoletoMulta;
	private Textbox txtBoletoBancoAgenciaDigito;
	private Textbox txtBoletoBancoCarteiraVariavel;
	private Textbox txtConvenioEmpresa;
	private Textbox txtBoletoBancoInstrucao;
	private Textbox txtBoletoBancoInstrucao2;
	private Textbox txtBoletoBancoInstrucao3;
	private Textbox txtBoletoBancoInstrucaoSacado;
	
	private List<Empresa> lsEmpresas;
	private List<String> lsBancosSuportados;
	private FechamentoParamgeral fechamentoParamgeral;
	
	private MyListbox paramsList;
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {		
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();		
		lsBancosSuportados = BancoLayout.getSuportados();
		
		super.doAfterCompose(comp);

		Long fechamentoparamgeralId = (Long) Executions.getCurrent().getArg().get("fechamentoparamgeralId");
		if(fechamentoparamgeralId != null && fechamentoparamgeralId > 0) {
			fechamentoParamgeral = fechamentoParamgeralService.obtenerID(fechamentoparamgeralId);
			
			if(fechamentoParamgeral.getEmpresa() != null) {
				cmbEmpresa.setText(fechamentoParamgeral.getEmpresa().getNombempresa());
			}
			
			if(fechamentoParamgeral.getBoletoBancoCod() != null){
				cmbBoletoBancoCod.setText(BancoLayout.getDescricao(fechamentoParamgeral.getBoletoBancoCod()));
			}
		}
		paramsList = (MyListbox) Executions.getCurrent().getArg().get("paramsList");
		
	}
	
	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 FechamentoParamgeral getFechamentoParamgeral() {
		return fechamentoParamgeral;
	}

	public void setFechamentoParamgeral(FechamentoParamgeral fechamentoParamgeral) {
		this.fechamentoParamgeral = fechamentoParamgeral;
	}
	
	public void onClick$btnSalvar() {
		final Integer CARTEIRA_BRADESCO = 99;
		String bancoSelecionado = null;
		try {
			
			if(getFechamentoParamgeral() == null) {
				setFechamentoParamgeral(new FechamentoParamgeral());
			}
			
			if(!verificarCampos()) {
				return;
			}
			
			if(cmbBoletoBancoCod.getSelectedItem() != null ){
				bancoSelecionado =  BancoLayout.getCodigo((String) cmbBoletoBancoCod.getSelectedItem().getValue());
			}
			
			if(bancoSelecionado != null && bancoSelecionado.equals(BancoLayout.BRADESCO_400_Envio.getCodBanco())){
				if(txtBoletoBancoCarteira.getText() != null){
					Integer carteira = Integer.valueOf(txtBoletoBancoCarteira.getText());
					if(carteira > CARTEIRA_BRADESCO){
						throw new Exception(Labels.getLabel("editarFechamentoParamgeralController.MSG.carteira.bradesco"));
					}	
				}			
			}	
			
			getFechamentoParamgeral().setCodConvenio(txtConvenioEmpresa.getText());
			getFechamentoParamgeral().setBoletoBancoAgencia(txtBoletoBancoAgencia.getText());
			getFechamentoParamgeral().setBoletoBancoAgenciaDigito(txtBoletoBancoAgenciaDigito.getText());
			getFechamentoParamgeral().setBoletoBancoCarteira(txtBoletoBancoCarteira.getText());
			getFechamentoParamgeral().setBoletoBancoCarteiraVariavel(txtBoletoBancoCarteiraVariavel.getText());
						
			if(cmbBoletoBancoCod.getSelectedItem() != null) {
				getFechamentoParamgeral().setBoletoBancoCod(bancoSelecionado);				
			}
			
			getFechamentoParamgeral().setBoletoBancoConta(txtBoletoBancoConta.getText());
			getFechamentoParamgeral().setBoletoBancoContaDigito(txtBoletoBancoContaDigito.getText());
			getFechamentoParamgeral().setBoletoDiasVenc(Integer.valueOf(txtBoletoDiasVenc.getText()));
			getFechamentoParamgeral().setBoletoBancoInstrucao(txtBoletoBancoInstrucao.getText());
			getFechamentoParamgeral().setBoletoBancoInstrucao2(txtBoletoBancoInstrucao2.getText());
			getFechamentoParamgeral().setBoletoBancoInstrucao3(txtBoletoBancoInstrucao3.getText());
			getFechamentoParamgeral().setBoletoBancoInstrucaoSacado(txtBoletoBancoInstrucaoSacado.getText());
			
			if(! txtBoletoJuros.getText().trim().isEmpty()) {
				getFechamentoParamgeral().setBoletoJuros(new BigDecimal(txtBoletoJuros.getText().replace(",", ".")));
			}
			
			if(! txtBoletoMulta.getText().trim().isEmpty()) {
				getFechamentoParamgeral().setBoletoMulta(new BigDecimal(txtBoletoMulta.getText().replace(",", ".")));
			}
			
			if(cmbEmpresa.getSelectedItem() != null) {
				getFechamentoParamgeral().setEmpresa((Empresa) cmbEmpresa.getSelectedItem().getValue());
			}
			
			getFechamentoParamgeral().setFecmodif(Calendar.getInstance().getTime());
			getFechamentoParamgeral().setActivo(true);
			getFechamentoParamgeral().setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			
			setFechamentoParamgeral(fechamentoParamgeralService.suscribirOrActualizacion(getFechamentoParamgeral()));
			
			if(paramsList != null) {
				paramsList.updateItem(getFechamentoParamgeral());
			}
			
			Messagebox.show(
					Labels.getLabel("editarFechamentoParamgeralController.MSG.suscribirOK"),
					Labels.getLabel("editarFechamentoParamgeralController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			
			closeWindow();
		} catch (Exception ex) {
			log.info(ex.getLocalizedMessage());
			Clients.alert(ex.getLocalizedMessage()!=null?ex.getLocalizedMessage():ex.getCause().getLocalizedMessage(),
					Labels.getLabel("editarFechamentoParamgeralController.window.title"), Messagebox.INFORMATION);
		}
	}
	
	private boolean verificarCampos() throws InterruptedException {
		if(cmbEmpresa.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("editarFechamentoParamgeralController.MSG.empresaNaoInformada"),
					Labels.getLabel("editarFechamentoParamgeralController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}
		
		Empresa empresa = (Empresa) cmbEmpresa.getSelectedItem().getValue();
		if(paramsList != null) {
			if(getFechamentoParamgeral() != null) {
				for (Object param : paramsList.getListData()) {
					FechamentoParamgeral fechamentoParamgeral = (FechamentoParamgeral) param;
					
					if((getFechamentoParamgeral().getFechamentoparamgeralId() == null ||
					   !fechamentoParamgeral.getFechamentoparamgeralId().equals(getFechamentoParamgeral().getFechamentoparamgeralId())) &&
					   empresa.equals(fechamentoParamgeral.getEmpresa())) {
						Messagebox.show(
								Labels.getLabel("editarFechamentoParamgeralController.MSG.empresaJaCadastrada"),
								Labels.getLabel("editarFechamentoParamgeralController.window.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
						return false;						
					}
				}
			}
		}
		
		return true;
	}

	public void onClick$btnApagar() {
		try {
			if(getFechamentoParamgeral() != null && getFechamentoParamgeral().getFechamentoparamgeralId() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarFechamentoParamgeralController.MSG.borrarPergunta"),
						Labels.getLabel("editarFechamentoParamgeralController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
	
				if (resp == Messagebox.YES) {
					fechamentoParamgeralService.borrar(getFechamentoParamgeral());
	
					Messagebox.show(
							Labels.getLabel("editarFechamentoParamgeralController.MSG.borrarOK"),
							Labels.getLabel("editarFechamentoParamgeralController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
	
					if (paramsList != null) {
						paramsList.removeItem(getFechamentoParamgeral());
					}
	
					closeWindow();
				}
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public Textbox getTxtBoletoBancoCod() {
		return cmbBoletoBancoCod;
	}

	public void setCmbBoletoBancoCod(Combobox cmbBoletoBancoCod) {
		this.cmbBoletoBancoCod = cmbBoletoBancoCod;
	}

	public Textbox getTxtBoletoBancoAgencia() {
		return txtBoletoBancoAgencia;
	}

	public void setTxtBoletoBancoAgencia(Textbox txtBoletoBancoAgencia) {
		this.txtBoletoBancoAgencia = txtBoletoBancoAgencia;
	}

	public Textbox getTxtBoletoBancoConta() {
		return txtBoletoBancoConta;
	}

	public void setTxtBoletoBancoConta(Textbox txtBoletoBancoConta) {
		this.txtBoletoBancoConta = txtBoletoBancoConta;
	}

	public Textbox getTxtBoletoBancoContaDigito() {
		return txtBoletoBancoContaDigito;
	}

	public void setTxtBoletoBancoContaDigito(Textbox txtBoletoBancoContaDigito) {
		this.txtBoletoBancoContaDigito = txtBoletoBancoContaDigito;
	}

	public Textbox getTxtBoletoBancoCarteira() {
		return txtBoletoBancoCarteira;
	}

	public void setTxtBoletoBancoCarteira(Textbox txtBoletoBancoCarteira) {
		this.txtBoletoBancoCarteira = txtBoletoBancoCarteira;
	}

	public Textbox getTxtBoletoDiasVenc() {
		return txtBoletoDiasVenc;
	}

	public void setTxtBoletoDiasVenc(Textbox txtBoletoDiasVenc) {
		this.txtBoletoDiasVenc = txtBoletoDiasVenc;
	}

	public List<String> getLsBancosSuportados() {
		return lsBancosSuportados;
	}

	public void setLsBancosSuportados(List<String> lsBancosSuportados) {
		this.lsBancosSuportados = lsBancosSuportados;
	}
	
	public Textbox getTxtConvenioEmpresa() {
		return txtConvenioEmpresa;
	}
	
	public void setTxtConvenioEmpresa(Textbox txtConvenioEmpresa) {
		this.txtConvenioEmpresa = txtConvenioEmpresa;
	}
	
	public Textbox getTxtBoletoBancoCarteiraVariavel() {
		return txtBoletoBancoCarteiraVariavel;
	}
	
	public void setTxtBoletoBancoCarteiraVariavel(Textbox txtBoletoBancoCarteiraVariavel) {
		this.txtBoletoBancoCarteiraVariavel = txtBoletoBancoCarteiraVariavel;
	}
	
	public Textbox getTxtBoletoBancoAgenciaDigito() {
		return txtBoletoBancoAgenciaDigito;
	}
	
	public void setTxtBoletoBancoAgenciaDigito(Textbox txtBoletoBancoAgenciaDigito) {
		this.txtBoletoBancoAgenciaDigito = txtBoletoBancoAgenciaDigito;
	}
	
}
