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

import java.util.ArrayList;
import java.util.Arrays;
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.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.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 enum BancosSuportados {
		ITAU("341", "Itaś"),
		BRADESCO("237", "Bradesco");
		
		private String codBanco;
		private String descricao;
		
		private BancosSuportados(String _codBanco, String descricao){
			this.codBanco = _codBanco;
			this.descricao = descricao;
		}
				
		public String getCodBanco() {
			return codBanco;
		}

		public String getDescricao() {
			return descricao;
		}

		public void setDescricao(String descricao) {
			this.descricao = descricao;
		}

		public void setCodBanco(String codBanco) {
			this.codBanco = codBanco;
		}	
		
		public static String getCodigo(String descricao){			
			for(BancosSuportados banco :BancosSuportados.values()){
				if(banco.descricao.equals(descricao)){
					return banco.codBanco;
				}
			}			
			return null;			
		}
		
		public static String getDescricao(String codigo){			
			for(BancosSuportados banco :BancosSuportados.values()){
				if(banco.codBanco.equals(codigo)){
					return banco.descricao;
				}
			}			
			return null;			
		}
	}
	
	private static final long serialVersionUID = 1L;
	
	private static Logger log = Logger.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 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();
		List<String> bancosSuportados = new ArrayList<String>(Arrays.asList(new String[]{BancosSuportados.ITAU.getDescricao(),BancosSuportados.BRADESCO.getDescricao()})); 
		lsBancosSuportados = bancosSuportados;
		
		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(BancosSuportados.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(cmbBoletoBancoCod.getSelectedItem() != null ){
				bancoSelecionado =  BancosSuportados.getCodigo((String) cmbBoletoBancoCod.getSelectedItem().getValue());
			}
			
			if(bancoSelecionado != null && bancoSelecionado.equals(BancosSuportados.BRADESCO.codBanco)){
				if(txtBoletoBancoCarteira.getText() != null){
					Integer carteira = Integer.valueOf(txtBoletoBancoCarteira.getText());
					if(carteira > CARTEIRA_BRADESCO){
						throw new Exception(Labels.getLabel("editarFechamentoParamgeralController.MSG.carteira.bradesco"));
					}	
				}			
			}	
			
			getFechamentoParamgeral().setBoletoBancoAgencia(txtBoletoBancoAgencia.getText());
			getFechamentoParamgeral().setBoletoBancoCarteira(txtBoletoBancoCarteira.getText());
						
			if(cmbBoletoBancoCod.getSelectedItem() != null) {
				getFechamentoParamgeral().setBoletoBancoCod(bancoSelecionado);				
			}
			
			getFechamentoParamgeral().setBoletoBancoConta(txtBoletoBancoConta.getText());
			getFechamentoParamgeral().setBoletoBancoContaDigito(txtBoletoBancoContaDigito.getText());
			getFechamentoParamgeral().setBoletoDiasVenc(Integer.valueOf(txtBoletoDiasVenc.getText()));
			
			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(),
					Labels.getLabel("editarFechamentoParamgeralController.window.title"), Messagebox.INFORMATION);
		}
	}
	
	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;
	}
	
}
