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

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
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.event.Event;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Longbox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Aidf;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.TipoMovimentacion;
import com.rjconsultores.ventaboletos.service.AidfService;
import com.rjconsultores.ventaboletos.service.EstadoService;
import com.rjconsultores.ventaboletos.service.MovimentacionBilhetesService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("movimentacionBilhetesController")
@Scope("prototype")
public class MovimentacionBilhetesController extends MyGenericForwardComposer {

	@Autowired
	private MovimentacionBilhetesService movimentacionBilhetesService;
	
	@Autowired
	private AidfService aidfService;
	
	@Autowired
	private PuntoVentaService puntoVentaService;
	
	@Autowired
	private EstadoService estadoService;
	
	private Combobox cmbAidf;
	private List<Aidf> lsAidf;
	
	private Combobox cmbTipoMovimentacion;
	private List<TipoMovimentacion> lsTipoMovimentacion;
	
	private Textbox txtForminicial;
	private Textbox txtFormfinal;	
	
	private Longbox txtCantidad;
	private List<PuntoVenta> lsPuntoVenta;
	private MyComboboxPuntoVenta cmbPuntoVentaOrigem;
	private MyComboboxPuntoVenta cmbPuntoVentaDestino;
	
	private Date fecmovimentacion;
	private Datebox dtbFecMovimentacion;
	
	private Label aidfEstado, aidfSerie, aidfSubserie;
	
	
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		List<Empresa> lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsAidf = aidfService.buscaAidfsPorEmpresas(lsEmpresas);
		lsTipoMovimentacion = movimentacionBilhetesService.obtenerTiposMovimetacion();
		setLsPuntoVenta(new ArrayList<PuntoVenta>());
		fecmovimentacion = new Date();
		
		super.doAfterCompose(comp);
	}
	
	public Textbox getTxtForminicial() {
		return txtForminicial;
	}

	public void setTxtForminicial(Textbox txtForminicial) {
		this.txtForminicial = txtForminicial;
	}

	public Textbox getTxtFormfinal() {
		return txtFormfinal;
	}

	public void setTxtFormfinal(Textbox txtFormfinal) {
		this.txtFormfinal = txtFormfinal;
	}
	
	public EstadoService getEstadoService() {
		return estadoService;
	}

	public void setEstadoService(EstadoService estadoService) {
		this.estadoService = estadoService;
	}

	public Combobox getCmbAidf() {
		return cmbAidf;
	}

	public void setCmbAidf(Combobox cmbAidf) {
		this.cmbAidf = cmbAidf;
	}

	public List<Aidf> getLsAidf() {
		return lsAidf;
	}

	public void setLsAidf(List<Aidf> lsAidf) {
		this.lsAidf = lsAidf;
	}
	
	public Datebox getDtbFecMovimentacion() {
		return dtbFecMovimentacion;
	}

	public void setDtbFecMovimentacion(Datebox dtbFecMovimentacion) {
		this.dtbFecMovimentacion = dtbFecMovimentacion;
	}
	
	public Date getFecmovimentacion() {
		return fecmovimentacion;
	}

	public void setFecmovimentacion(Date fecmovimentacion) {
		this.fecmovimentacion = fecmovimentacion;
	}
	
	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		
		cmbAidf.getValue();
		cmbPuntoVentaDestino.getValue();
		cmbPuntoVentaOrigem.getValue();
		
		try{
			
			Comboitem aidfSeleccionada = cmbAidf.getSelectedItem();			
			Aidf aidf = (Aidf)aidfSeleccionada.getValue();
			
			Comboitem origemSeleccionada = cmbPuntoVentaOrigem.getSelectedItem();
			PuntoVenta origem = origemSeleccionada != null ? (PuntoVenta)origemSeleccionada.getValue() : null;
			
			Comboitem destinoSeleccionado = cmbPuntoVentaDestino.getSelectedItem();
			PuntoVenta destino = (PuntoVenta)destinoSeleccionado.getValue();
			
			Comboitem tipoMovSeleccionado = cmbTipoMovimentacion.getSelectedItem();
			TipoMovimentacion tipoMovimentacion = (TipoMovimentacion)tipoMovSeleccionado.getValue();
			
			String formInicial = txtForminicial.getValue();
			String formFinal = txtFormfinal.getValue();
			
			Long cantidad = txtCantidad.getValue();
			
			if(StringUtils.isNotBlank(formInicial) && StringUtils.isNotBlank(formFinal) && cantidad == null)
				movimentacionBilhetesService.realizaMovimentacionBilhetes(aidf, origem, destino, formInicial, formFinal, tipoMovimentacion);
			else if(cantidad != null)
				movimentacionBilhetesService.realizaMovimentacionBilhetes(aidf, origem, destino, cantidad, tipoMovimentacion);
			else
				movimentacionBilhetesService.realizaMovimentacionBilhetes(aidf, origem, destino, tipoMovimentacion);
						
			Messagebox.show(
					Labels.getLabel("movimentacionBilhetesController.MSG.suscribirOK"),
					Labels.getLabel("movimentacionBilhetesController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		} catch (Exception ex) {
			
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("movimentacionBilhetesController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}		
	}
	
	public void onChange$cmbAidf(Event evt) throws InterruptedException {
		
		Comboitem aidfSeleccionada = cmbAidf.getSelectedItem();		
		Aidf aidf = (Aidf)aidfSeleccionada.getValue();
		
		getAidfEstado().setValue(aidf.getEstado().getNombestado());
		getAidfSerie().setValue(aidf.getSerie());
		getAidfSubserie().setValue(aidf.getSubserie());
	}
	
	public List<TipoMovimentacion> getLsTipoMovimentacion() {
		return lsTipoMovimentacion;
	}

	public void setLsTipoMovimentacion(List<TipoMovimentacion> lsTipoMovimentacion) {
		this.lsTipoMovimentacion = lsTipoMovimentacion;
	}

	public Combobox getCmbTipoMovimentacion() {
		return cmbTipoMovimentacion;
	}

	public void setCmbTipoMovimentacion(Combobox cmbTipoMovimentacion) {
		this.cmbTipoMovimentacion = cmbTipoMovimentacion;
	}

	public Longbox getTxtCantidad() {
		return txtCantidad;
	}

	public void setTxtCantidad(Longbox txtCantidad) {
		this.txtCantidad = txtCantidad;
	}

	public Label getAidfEstado() {
		return aidfEstado;
	}

	public void setAidfEstado(Label aidfEstado) {
		this.aidfEstado = aidfEstado;
	}

	public Label getAidfSerie() {
		return aidfSerie;
	}

	public void setAidfSerie(Label aidfSerie) {
		this.aidfSerie = aidfSerie;
	}

	public Label getAidfSubserie() {
		return aidfSubserie;
	}

	public void setAidfSubserie(Label aidfSubserie) {
		this.aidfSubserie = aidfSubserie;
	}

	public MyComboboxPuntoVenta getCmbPuntoVentaOrigem() {
		return cmbPuntoVentaOrigem;
	}

	public void setCmbPuntoVentaOrigem(MyComboboxPuntoVenta cmbPuntoVentaOrigem) {
		this.cmbPuntoVentaOrigem = cmbPuntoVentaOrigem;
	}

	public MyComboboxPuntoVenta getCmbPuntoVentaDestino() {
		return cmbPuntoVentaDestino;
	}

	public void setCmbPuntoVentaDestino(MyComboboxPuntoVenta cmbPuntoVentaDestino) {
		this.cmbPuntoVentaDestino = cmbPuntoVentaDestino;
	}

	public List<PuntoVenta> getLsPuntoVenta() {
		return lsPuntoVenta;
	}

	public void setLsPuntoVenta(List<PuntoVenta> lsPuntoVenta) {
		this.lsPuntoVenta = lsPuntoVenta;
	}
	
	
}
