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

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
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.event.Event;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.service.IntegracaoService;
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.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioAproveitamentoFinanceiro;


@Controller("relatorioDERPRController")
@Scope("prototype")
@SuppressWarnings({ "rawtypes", "unchecked" })
public class RelatorioDERPRController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = LogManager.getLogger(RelatorioDERPRController.class);

	private Datebox datInicial;
	private Datebox datFinal;

	private MyComboboxEstandar cmbEmpresa;
	private List<Empresa> lsEmpresa;
	
	@Autowired
	private IntegracaoService integracaoService;

	@Autowired
	private RutaService rutaService;

	private MyListbox linhaList;
	private MyListbox linhaListSelList;
	private Textbox txtPalavraPesquisaLinha;
	private ArrayList<Ruta> lsNumLinha = new ArrayList<Ruta>();

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);

		lsEmpresa = UsuarioLogado.getUsuarioLogado().getEmpresa();
		linhaList.setItemRenderer(new RenderRelatorioAproveitamentoFinanceiro());
		linhaListSelList.setItemRenderer(new RenderRelatorioAproveitamentoFinanceiro());
	}

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

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

	public void onDoubleClick$linhaList(Event ev) {
		Ruta rutaAux = (Ruta) linhaList.getSelected();
		linhaListSelList.addItemNovo(rutaAux);
	}

	private void executarPesquisaLinha() {

		String palavraPesquisaRuta = txtPalavraPesquisaLinha.getText();
		linhaList.setData(rutaService.buscaRuta(palavraPesquisaRuta));

		if (linhaList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel("relatorioLinhasHorarioController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
				log.error(ex);
			}
		}
	}

	public void onClick$btnPesquisaLinha(Event ev) {
		executarPesquisaLinha();
	}

	public void onClick$btnLimparLinha(Event ev) {
		linhaList.setData(new ArrayList<Ruta>());
		linhaList.clearSelection();
		lsNumLinha.clear();
	}

	public void onClick$btnExecutarRelatorio(Event ev) throws Exception {
		executarRelatorio();
	}

	private void executarRelatorio() throws Exception {
		List<Ruta> lslinhas = new ArrayList(Arrays.asList(linhaListSelList.getData()));

		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		Empresa empresa = (Empresa) itemEmpresa.getValue();
		File arquivoTxt = integracaoService.importacaoQdmpDer(datInicial.getValue(), datFinal.getValue(), empresa, lslinhas);
		
		downloadArquivo(arquivoTxt, null);
	}
	
	private void downloadArquivo(File arquivoTxt, File arquivoXls) throws Exception {
		String contentType = null;
		InputStream isFile = null;
		String nomeArquivo = null;

		contentType = "application/notepad";
		isFile = new FileInputStream(arquivoTxt);
		nomeArquivo = arquivoTxt.getName();

		Filedownload.save(isFile, contentType, nomeArquivo);

		if (arquivoTxt != null) {
			arquivoTxt.delete();
		}
		
		if (arquivoXls != null) {
			arquivoXls.delete();
		}
	}
}
