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

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.media.AMedia;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Div;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Iframe;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Toolbarbutton;

import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.SaidaRelatorio;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

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

	private static final long serialVersionUID = 1L;
	private Div divResultadoRelatorio;
	private Iframe iframeRelatorio;
	private Toolbarbutton btnSalvarPDF;
	private Toolbarbutton btnSalvarXLS;
	private AMedia conteudoRelatorioPDF;
	private AMedia conteudoRelatorioXLS;
	private Relatorio relatorio;
	private String nomeRelatorioDownload;

	/**
	 * @return the btnSalvarPDF
	 */
	public Toolbarbutton getBtnSalvarPDF() {
		return btnSalvarPDF;
	}

	/**
	 * @param btnSalvarPDF
	 *            the btnSalvarPDF to set
	 */
	public void setBtnSalvarPDF(Toolbarbutton btnSalvarPDF) {
		this.btnSalvarPDF = btnSalvarPDF;
	}

	/**
	 * @return the btnSalvarXLS
	 */
	public Toolbarbutton getBtnSalvarXLS() {
		return btnSalvarXLS;
	}

	/**
	 * @param btnSalvarXLS
	 *            the btnSalvarXLS to set
	 */
	public void setBtnSalvarXLS(Toolbarbutton btnSalvarXLS) {
		this.btnSalvarXLS = btnSalvarXLS;
	}

	public Iframe getIframeRelatorio() {
		return iframeRelatorio;
	}

	public void setIframeRelatorio(Iframe iframeRelatorio) {
		this.iframeRelatorio = iframeRelatorio;
	}

	public Div getDivResultadoRelatorio() {
		return divResultadoRelatorio;
	}

	public void setDivResultadoRelatorio(Div divResultadoRelatorio) {
		this.divResultadoRelatorio = divResultadoRelatorio;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		this.relatorio = (Relatorio) Executions.getCurrent().getArg().get("relatorio");
		if (relatorio.getInfoMsg().size() > 0) {
			String msg = "";
			for (String msgItem : relatorio.getInfoMsg())
				msg = msg.concat(msgItem + "\n");
			Messagebox.show(
					msg, "",
					Messagebox.OK, Messagebox.INFORMATION);
		}

		super.doAfterCompose(comp);
		final InputStream mediais = new ByteArrayInputStream(this.relatorio.getConteudo(SaidaRelatorio.PDF));

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm");
		nomeRelatorioDownload = relatorio.getNome() + "_" + sdf.format(Calendar.getInstance().getTime());

		conteudoRelatorioPDF = new AMedia(nomeRelatorioDownload + ".pdf", "pdf", null, mediais);
		iframeRelatorio.setContent(conteudoRelatorioPDF);
	}

	public void onClick$btnSalvarPDF(Event ev) {
		Filedownload.save(conteudoRelatorioPDF.getStreamData(), "application/pdf", nomeRelatorioDownload + ".pdf");
	}

	public void onClick$btnSalvarXLS(Event ev) throws Exception {
		final InputStream mediais = new ByteArrayInputStream(this.relatorio.getConteudo(SaidaRelatorio.XLS));

		conteudoRelatorioXLS = new AMedia("relatorio.xls", "xls", null, mediais);
		Filedownload.save(conteudoRelatorioXLS.getStreamData(), "application/xls", nomeRelatorioDownload + ".xls");
	}
}
