/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.financeiro;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

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.event.Event;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Row;
import org.zkoss.zul.Toolbar;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioFormaPagamentoAgencia;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioFormaPagamentoAgenciaNovo;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioFormaPagamentoAgenciaRutaTramo;
import com.rjconsultores.ventaboletos.service.FormaPagamentoAgenciaService;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 * 
 * @author Administrador
 */
@Controller("formaPagamentoAgenciaController")
@Scope("prototype")
public class FormaPagamentoAgenciaController extends MyGenericForwardComposer {

	private static final String TODAS = "Todas; ";
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Autowired
	private FormaPagamentoAgenciaService financeiroService;
	@Autowired
	private RutaService rutaService;
	@Autowired
	private FormaPagoService formaPagoService;	
	@Autowired
	private DataSource dataSourceRead;

	private Datebox fecInicio;
	private Datebox fecFinal;
	
	private MyComboboxEstandar cmbEmpresa;
	private List<Empresa> lsEmpresas;
	
	private MyComboboxPuntoVenta cmbAgencia;
	
	private MyComboboxEstandar cmbRuta;
	private MyComboboxEstandar cmbFormaPago;
	private List<Ruta> lsRuta;

	private List<Ruta> listSelectedRutas;
	private MyListbox selectedRutasList;
	private List<FormaPago> lsFormaPago;
	
	private Radiogroup rgLayout;
	private Toolbar toolbar;
	private Row rowLinha;
	
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {		
		
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsRuta = rutaService.obtenerTodos();
		listSelectedRutas = new ArrayList<Ruta>();
		lsFormaPago = formaPagoService.obtenerTodos();
		super.doAfterCompose(comp);
	}
	
	
	public MyComboboxPuntoVenta getCmbAgencia() {
		return cmbAgencia;
	}


	public void setCmbAgencia(MyComboboxPuntoVenta cmbAgencia) {
		this.cmbAgencia = cmbAgencia;
	}


	public FormaPagamentoAgenciaService getFinanceiroService() {
		return financeiroService;
	}

	public void setFinanceiroService(FormaPagamentoAgenciaService financeiroService) {
		this.financeiroService = financeiroService;
	}

	public DataSource getDataSourceRead() {
		return dataSourceRead;
	}

	public void setDataSourceRead(DataSource dataSourceRead) {
		this.dataSourceRead = dataSourceRead;
	}

	public MyComboboxEstandar getCmbEmpresa() {
		return cmbEmpresa;
	}

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

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

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

	public Datebox getFecFinal() {
		return fecFinal;
	}

	public void setFecFinal(Datebox fecFinal) {
		this.fecFinal = fecFinal;
	}

	public Datebox getFecInicio() {
		return fecInicio;
	}

	public void setFecInicio(Datebox fecInicio) {
		this.fecInicio = fecInicio;
	}

	public void onClick$btnInforme(Event e) throws Exception {
		StringBuilder filtro = new StringBuilder();
		
		Date dataInicio = fecInicio.getValue();
		Date dataFinal = fecFinal.getValue();

		SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yyyy");
		
		Map<String, Object> parametros = new HashMap<>();
		
		if(rgLayout.getSelectedItem().getValue().equals("LINHA")){
			parametros.put("DATA_INICIAL", dt.format(dataInicio));
			parametros.put("DATA_FINAL", dt.format(dataFinal));
		}else{
			parametros.put("DATA_INICIAL", dataInicio);
			parametros.put("DATA_FINAL", dataFinal);			
		}
		
		filtro.append("Periodo: ");
		filtro.append(dt.format(dataInicio)).append(" a ");
		filtro.append(dt.format(dataFinal)).append("; ");
		
		parametros.put("USUARIO_ID", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString());
		parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario());
		
		filtro.append("Empresa: ");
		if (cmbEmpresa.isValid() && cmbEmpresa.getSelectedItem() != null) {
			Empresa empresa = ((Empresa)cmbEmpresa.getSelectedItem().getValue());
			parametros.put("EMPRESA", empresa.getEmpresaId());
			filtro.append(empresa.getNombempresa()).append("; ");
		}else {
			filtro.append(TODAS);
		}
		
		filtro.append("Agência: ");
		if (cmbAgencia.getSelectedItem() != null) {
			PuntoVenta agencia = ((PuntoVenta) cmbAgencia.getSelectedItem().getValue());
			parametros.put("AGENCIA", agencia.getPuntoventaId());
			filtro.append(agencia.getNombpuntoventa()).append("; ");
		}else {
			filtro.append(TODAS);
		}
		
		filtro.append("Linha: ");
		if( rgLayout.getSelectedItem().getValue().equals("LINHA") 
				&& listSelectedRutas != null 
				&& !listSelectedRutas.isEmpty()) {
			StringBuilder idsRutas = new StringBuilder();
			StringBuilder linhas = new StringBuilder();
			for(Ruta r : listSelectedRutas){
				idsRutas.append(r.getRutaId()).append(", ");
				linhas.append(r.getDescruta()).append(", ");
			}
			
			parametros.put("RUTAS_IDS", idsRutas.substring(0, idsRutas.length()-2));
			filtro.append(linhas.substring(0, idsRutas.length()-2));
		}else {
			filtro.append(TODAS);
		}
		
		filtro.append("Forma de Pagamento: ");
		if (cmbFormaPago.getSelectedItem() != null) {
			FormaPago formaPago= ((FormaPago) cmbFormaPago.getSelectedItem().getValue());
			parametros.put("FORMA_PAGO", formaPago.getFormapagoId());
			filtro.append(formaPago.getDescpago()).append("; ");
		}else {
			filtro.append(TODAS);
		}
		
		if(rgLayout.getSelectedItem().getValue().equals("DATA_VENDA")) {
			parametros.put("TIPO_DATA", "DATA_VENDA");			
		}
		
		parametros.put("FILTROS", filtro.toString());
		
		Map<String, Object> args = new HashMap<>();
		if(rgLayout.getSelectedItem().getValue().equals("PADRAO")){
			RelatorioFormaPagamentoAgencia relatorio = new RelatorioFormaPagamentoAgencia(parametros, dataSourceRead.getConnection());
			args.put("relatorio", relatorio);
		}else if(rgLayout.getSelectedItem().getValue().equals("LINHA")){
			RelatorioFormaPagamentoAgenciaRutaTramo relatorio = new RelatorioFormaPagamentoAgenciaRutaTramo(parametros, dataSourceRead.getConnection());
			args.put("relatorio", relatorio);
		}else if(rgLayout.getSelectedItem().getValue().equals("NOVO")){
			RelatorioFormaPagamentoAgenciaNovo relatorio = new RelatorioFormaPagamentoAgenciaNovo(parametros, dataSourceRead.getConnection());
			args.put("relatorio", relatorio);
		}
		
		openWindow("/component/reportView.zul",
				Labels.getLabel("formaPagamentoAgenciaController.window.title"), args, MODAL);

	}
	
	public void onClick$btnAddRuta(Event ev) {
		if (cmbRuta.getSelectedItem() != null) {
			listSelectedRutas.add((Ruta) cmbRuta.getSelectedItem().getValue());
			selectedRutasList.setData(listSelectedRutas);
			cmbRuta.setSelectedItem(null);
		}
	}
	
	public void onClick$rdLinha(Event ev) {
		habilitaLinha(true);
	}
	
	public void onClick$rdPadrao(Event ev) {
		habilitaLinha(false);
	}
	
	public void onClick$rdNovo(Event ev) {
		habilitaLinha(false);
	}
	
	private void habilitaLinha( boolean view) {
		rowLinha.setVisible(view);
		toolbar.setVisible(view);
		selectedRutasList.setVisible(view);
	}

	public void onClick$btnRemoveRuta(Event ev) {
		Ruta ruta = (Ruta) selectedRutasList.getSelected();
		listSelectedRutas.remove(ruta);
		selectedRutasList.setData(listSelectedRutas);
	}

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

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

	public List<Ruta> getListSelectedRutas() {
		return listSelectedRutas;
	}

	public void setListSelectedRutas(List<Ruta> listSelectedRutas) {
		this.listSelectedRutas = listSelectedRutas;
	}

	public MyListbox getSelectedRutasList() {
		return selectedRutasList;
	}

	public void setSelectedRutasList(MyListbox selectedRutasList) {
		this.selectedRutasList = selectedRutasList;
	}

	public List<FormaPago> getLsFormaPago() {
		return lsFormaPago;
	}
	
	public void setLsFormaPago(List<FormaPago> lsFormaPago) {
		this.lsFormaPago = lsFormaPago;
	}

	public Radiogroup getRgLayout() {
		return rgLayout;
	}

	public void setRgLayout(Radiogroup rgLayout) {
		this.rgLayout = rgLayout;
	}

	public Toolbar getToolbar() {
		return toolbar;
	}

	public void setToolbar(Toolbar toolbar) {
		this.toolbar = toolbar;
	}	
	
}
