import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.xml.JRXmlLoader;

import com.fozci.sicorc.service.AcertoService;

import flex.messaging.io.ArrayList;

/**
 * 
 * @author root
 * @version
 */

public class ServletReport extends HttpServlet {

	private ServletContext sc;

	private AcertoService acertoService = new AcertoService();

	public void init(ServletConfig config) throws ServletException {
		super.init(config);

		sc = config.getServletContext();

	}

	public ServletReport() {
		super();
	}

	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// Pegando valores enviados pela TelaRelatorios
		String acao = request.getParameter("acao");
		String tipoRelatorio = request.getParameter("tipoRelatorio");
		ArrayList dados = new ArrayList();
		File reportFile = null;
		HashMap parameters = new HashMap();
		ResultSet rs = null;
		String relatorio = null;
		JRDataSource jrRS = null;
		List<?> dadosJRBean = new ArrayList();

		
		if (acao.equals("contabilizar")) {
			

			int cdPeriodo=Integer.parseInt(request.getParameter("periodo"));
			

			try {		
				dadosJRBean = acertoService.acertosContabilizar(cdPeriodo);

				jrRS = new JRBeanCollectionDataSource(dadosJRBean);
				
			} catch (Exception e) {

				e.printStackTrace();
			}

		}

		if (tipoRelatorio.equals("xls")) {

			try {

				JasperDesign desenho = JRXmlLoader
						.load(sc
								.getRealPath("WEB-INF/report/"+acao+".jrxml"));

				// compila o relatório
				JasperReport relatorio1 = JasperCompileManager
						.compileReport(desenho);

				JasperPrint impressao = JasperFillManager.fillReport(
						relatorio1, parameters, jrRS);

				JRXlsExporter exporter = new JRXlsExporter();
				ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
				exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT,
						impressao);
				exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,
						xlsReport);
				exporter
						.setParameter(
								JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
								Boolean.TRUE);
				exporter.setParameter(
						JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,
						Boolean.TRUE);
				exporter.setParameter(
						JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
						Boolean.TRUE);
				exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME,
						"c:/relatorio.xls");

				exporter.exportReport();
				byte[] bytes = xlsReport.toByteArray();
				response.setContentType("application/vnd.ms-excel");
				response.setContentLength(bytes.length);
				xlsReport.close();
				OutputStream ouputStream = response.getOutputStream();
				ouputStream.write(bytes, 0, bytes.length);
				ouputStream.flush();
				ouputStream.close();

			} catch (Exception e) {

				e.printStackTrace();
			}

		}

		if (tipoRelatorio.equals("pdf")) {
			
			reportFile = new File(sc
					.getRealPath("WEB-INF/report/"+acao+".jasper"));


			byte[] bytes = null;

			try {
				bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),
						parameters, jrRS);

			} catch (JRException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			if (bytes != null && bytes.length > 0) {
				response.setContentType("application/pdf");
				response.setContentLength(bytes.length);
				ServletOutputStream ouputStream = response.getOutputStream();
				ouputStream.write(bytes, 0, bytes.length);
				ouputStream.flush();
				ouputStream.close();
			}

		}

	}
}