/*
 * RelatorioServlet.java
 *
 * Created on 27 de Abril de 2005, 16:16
 */

package siprp.pagina;

import java.io.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.velocity.*;
import org.apache.velocity.app.*;
/**
 *
 * @author  fpalma
 */
public class RelatorioServlet extends MailerServlet
{
	private final static String EMPRESA = "empresa";
	private final static String EMAIL_EMPRESA = "email_empresa";
	private final static String ANO = "ano";
	
	private final static String[] FORM_FIELDS = new String[]{
								EMPRESA, ANO, EMAIL_EMPRESA	};
	
	public void doGet( HttpServletRequest req, HttpServletResponse res )
		throws IOException
	{
		ServletOutputStream out = res.getOutputStream();
		String queryString = req.getQueryString();
		res.setContentType( "text/html" );

		Hashtable parameters = new Hashtable();

		// Ir buscar os parametros 'a sessao
		HttpSession session = req.getSession( false );
		if( session == null )
		{
			// timeout
			out.println( showPage( "relatorio/pedido_sessao_expirou.html", null ) );
			return;
		}

		out.println( showPage( "relatorio/pedido_relatorio.html", parameters ) );
	}

	public void doPost( HttpServletRequest req, HttpServletResponse res )
		throws IOException
	{
		ServletOutputStream out = res.getOutputStream();
		String queryString = req.getQueryString();
		res.setContentType( "text/html" );

		// Info de marcacao
		// Dados que vem no pedido: marcacao_tipo, data, hora
		Hashtable parameters = parseParameters( new Hashtable( req.getParameterMap() ) );
		
		// Ir buscar o resto dos parametros 'a sessao
		HttpSession session = req.getSession( false );
		if( session == null )
		{
			// timeout
			out.println( showPage( "relatorio/pedido_sessao_expirou.html", null ) );
			return;
		}

		parameters.put( EMPRESA, session.getAttribute( siprpServlet.sessionCompanyName ) );
		String from = ( String ) session.getAttribute( siprpServlet.sessionCompanyEmail );
		
		String email = DEFAULT_EMAIL;
		if( PROPERTIES != null && PROPERTIES.containsKey( EMAIL ) )
		{
			email = ( String ) PROPERTIES.get( EMAIL );
		}
		String destination = email;
		String subject = "Pedido de envio de relatorio via web";
		if( parameters.get( ANO ) == null )
		{
			parameters.put( ANO, "corrente" );
		}
		String content = createContent( parameters, FORM_FIELDS, "relatorio/pedido.html" );
		// manda mail
		boolean success = sendMail( from, destination, subject, content, true );

		// mostra pagina correspondente
		out.println( showResultPage( success, "relatorio/pedido_enviado.html", "relatorio/pedido_nao_enviado.html" ) );
	}
	
	private String showPage( String page, Hashtable parameters )
	{
		VelocityContext context = new VelocityContext();
		StringWriter output = new StringWriter();

		try
		{
			if( parameters != null )
			{
				String key;
				for( Enumeration e = parameters.keys(); e.hasMoreElements(); )
				{
					key = ( String ) e.nextElement();
					context.put( key, parameters.get( key ) );
				}
			}

			Velocity.mergeTemplate( page, Velocity.ENCODING_DEFAULT, context, output );

			return output.toString();
		}
		catch( Exception e )
		{
			e.printStackTrace();
		}

		return null;
	}
}
