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

import java.util.List;

import org.apache.commons.lang.BooleanUtils;
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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zkplus.databind.BindingListModelList;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.AliasClasse;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.enums.EnumClasseServicoConfortoMonitrip;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.AliasClasseService;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("editarAliasClasseController")
@Scope("prototype")
public class EditarAliasClasseController extends MyGenericForwardComposer {

	private static final String TITULO = "editarAliasClasseController.window.title";
	private static final long serialVersionUID = 1L;
	@Autowired
	private AliasClasseService aliasClasseService;
	@Autowired
	private ClaseServicioService claseServicioService;
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private RutaService rutaService;

	private AliasClasse aliasClasse;
	private MyListbox aliasClasseList;
	
	private List<ClaseServicio> lsClasse;
	private List<OrgaoConcedente> lsOrgaoConcedente;
	private List<EnumClasseServicoConfortoMonitrip> lsClasseServicoConfortoMonitrip;
	private List<Ruta> lsRuta;;
	private MyComboboxEstandar cmbClasse;
	private MyComboboxEstandar cmbAlias;
	private MyComboboxEstandar cmbOrgaoConcedente;
	private MyComboboxEstandar cmbRuta;
	private Textbox txtMensagem;
	private MyComboboxEstandar cmbEmpresa;
	private List<Empresa> lsEmpresa;
	private Checkbox chkSomenteImpressao;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		super.doAfterCompose(comp);
		setLsClasse(claseServicioService.buscarTodosExceto(-1));
		setLsOrgaoConcedente(orgaoConcedenteService.obtenerTodos());
		setLsClasseServicoConfortoMonitrip(EnumClasseServicoConfortoMonitrip.getList());	
		lsEmpresa = empresaService.obtenerTodos();		
		aliasClasse = (AliasClasse) Executions.getCurrent().getArg().get("aliasClasse");
		aliasClasseList = (MyListbox) Executions.getCurrent().getArg().get("aliasClasseList");
		setLsRuta(buscarRutasPorEmpresaOrgaoConcedenteClaseServicio());
		chkSomenteImpressao.setChecked(BooleanUtils.toBoolean(aliasClasse.getIndSomenteImpressao()));
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		
		cmbAlias.getValue();
		cmbClasse.getValue();
		
		try {		
			if(cmbRuta.getSelectedItem() == null) {
				aliasClasse.setRuta(null);
			}
			if(cmbEmpresa.getSelectedItem() == null) {
				aliasClasse.setEmpresa(null);
			}
			aliasClasse.setIndSomenteImpressao(chkSomenteImpressao.isChecked() ? Boolean.TRUE : Boolean.FALSE);
			aliasClasseService.suscribirActualizar(aliasClasse);
			aliasClasseList.updateItem(aliasClasse);

			Messagebox.show(
					Labels.getLabel("MSG.suscribirOK"),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();
		} catch (BusinessException ex) {
			Messagebox.show(
					ex.getMessage(),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.ERROR);
		} catch (Exception ex) {
			Messagebox.show(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagar(Event ev) throws InterruptedException {
		Integer resp = Messagebox.show(
					Labels.getLabel("MSG.borrarPergunta"),
					Labels.getLabel(TITULO),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp == Messagebox.YES) {

			aliasClasseService.borrar(aliasClasse);

			Messagebox.show(
						Labels.getLabel("MSG.borrarOK"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.INFORMATION);

			aliasClasseList.removeItem(aliasClasse);

			closeWindow();
		}
	}
	
	public void onChange$cmbEmpresa(Event ev) throws InterruptedException {

		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		Comboitem itemOrgaoConcedente = cmbOrgaoConcedente.getSelectedItem();
		Comboitem itemClaseServicio= cmbClasse.getSelectedItem();
		
		if (itemEmpresa == null || (itemEmpresa != null && itemEmpresa.getValue() == null) ){
			return;
		}
		if (itemOrgaoConcedente == null || (itemOrgaoConcedente != null && itemOrgaoConcedente.getValue() == null) ){
			return;
		}
		if (itemOrgaoConcedente == null || (itemOrgaoConcedente != null && itemOrgaoConcedente.getValue() == null) ){
			return;
		}
		if (itemClaseServicio == null || (itemClaseServicio != null && itemClaseServicio.getValue() == null) ){
			return;
		}
		
		Empresa empresa = (Empresa) itemEmpresa.getValue();
		OrgaoConcedente orgaoConcedente = (OrgaoConcedente) itemOrgaoConcedente.getValue();
		ClaseServicio claseServicio = (ClaseServicio) itemClaseServicio.getValue();
	
		List<Ruta> lsRuta = rutaService.buscarRutasPorEmpresaOrgaoConcedenteClaseServicio(empresa, orgaoConcedente, claseServicio);
		cmbRuta.setModel(new BindingListModelList(lsRuta, false));
		
	}
	
	private List<Ruta> buscarRutasPorEmpresaOrgaoConcedenteClaseServicio() {
		return rutaService.buscarRutasPorEmpresaOrgaoConcedenteClaseServicio(aliasClasse.getEmpresa(), aliasClasse.getOrgaoConcedente(), aliasClasse.getClasse());
	}

	public AliasClasse getAliasClasse() {
		return aliasClasse;
	}

	public void setAliasClasse(AliasClasse aliasClasse) {
		this.aliasClasse = aliasClasse;
	}

	public List<ClaseServicio> getLsClasse() {
		return lsClasse;
	}

	public void setLsClasse(List<ClaseServicio> lsClasse) {
		this.lsClasse = lsClasse;
	}

	public List<OrgaoConcedente> getLsOrgaoConcedente() {
		return lsOrgaoConcedente;
	}

	public void setLsOrgaoConcedente(List<OrgaoConcedente> lsOrgaoConcedente) {
		this.lsOrgaoConcedente = lsOrgaoConcedente;
	}

	public MyComboboxEstandar getCmbClasse() {
		return cmbClasse;
	}

	public void setCmbClasse(MyComboboxEstandar cmbClasse) {
		this.cmbClasse = cmbClasse;
	}

	public MyComboboxEstandar getCmbAlias() {
		return cmbAlias;
	}

	public void setCmbAlias(MyComboboxEstandar cmbAlias) {
		this.cmbAlias = cmbAlias;
	}

	public MyComboboxEstandar getCmbOrgaoConcedente() {
		return cmbOrgaoConcedente;
	}

	public void setCmbOrgaoConcedente(MyComboboxEstandar cmbOrgaoConcedente) {
		this.cmbOrgaoConcedente = cmbOrgaoConcedente;
	}

	public Textbox getTxtMensagem() {
		return txtMensagem;
	}

	public void setTxtMensagem(Textbox txtMensagem) {
		this.txtMensagem = txtMensagem;
	}

	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	public void setLsEmpresa(List<Empresa> lsEmpresa) {
		this.lsEmpresa = lsEmpresa;
	}

	public List<EnumClasseServicoConfortoMonitrip> getLsClasseServicoConfortoMonitrip() {
		return lsClasseServicoConfortoMonitrip;
	}

	public void setLsClasseServicoConfortoMonitrip(List<EnumClasseServicoConfortoMonitrip> lsClasseServicoConfortoMonitrip) {
		this.lsClasseServicoConfortoMonitrip = lsClasseServicoConfortoMonitrip;
	}

	public List<Ruta> getLsRuta() {
		return lsRuta;
	}

	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}
	
}
