/*
 * SuperOffersHandler.java
 *
 * Created on 10 de agosto de 2004, 17:57
 */

package com.fenalco.servlets.shopkeeper;

import java.io.File;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.fenalco.entities.Community;
import com.fenalco.entities.PaymentMethodList;
import com.fenalco.entities.Store;
import com.fenalco.entities.SuperOffer;
import com.fenalco.entities.SupplierProduct;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;

/**
 * Este servlet procesa las solictudes de visualización de la información
 * detallada referente a una superoferta, de tal forma que carga la información
 * de la superoferta como una instancia de la clase <CODE>SuperOffer</CODE> de
 * acuerdo con el parámetro <CODE>id</CODE> y luego la envía a la página
 * versuperoferta.jsp como un atributo con nombre <CODE>view</CODE>. También
 * construye la list de establecimientos del minorista que aparecen en
 * versuperoferta.jsp con el fin que el minorista pueda seleccionar el destino
 * de compra de la superoferta.
 * 
 * @author Mario Linares Vásquez
 */
public class SuperOffersHandler extends HttpServlet
{

	/**
	 * Inicializa el servlet.
	 * 
	 * @param config
	 * @throws ServletException
	 */
	public void init( ServletConfig config ) throws ServletException
	{
		super.init( config );

	}

	/**
	 * Destructor de el servlet.
	 */
	public void destroy( )
	{

	}

	/**
	 * Procesa las solicitudes de los métodos HTTP <code>GET</code> y
	 * <code>POST</code>. Este método construye una instancia de la clase
	 * <CODE>SuperOffer</CODE> con el parámetro <CODE>id</CODE> del <CODE>
	 * request</CODE>, que luego es cargada en el <CODE>response</CODE> como
	 * un atributo con nombre <CODE>view</CODE>. También crea una instancia
	 * de la clase <CODE>StoresList</CODE> con id del usuario de la sesión y
	 * lo envia en el <CODE>reponse</CODE> como atributo con nombre <CODE>
	 * storesList</CODE>. El flujo es redireccionado a la página
	 * versuperoferta.jsp
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void processRequest( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
			IOException
	{

		String url = "/minorista/versuperoferta.jsp";
		String message = "";
		HttpSession session = request.getSession( false );

		try
		{
			if( session != null && ( User )session.getAttribute( "user" ) != null
					&& ( ( User )session.getAttribute( "user" ) ).getRoleId( ) == 3 )
			{
				int id = Integer.parseInt( request.getParameter( "id" ) );
				SuperOffer view = new SuperOffer( id );
				Store store = ( Store )request.getSession( ).getAttribute( "store" );

				int supplier = view.getSupplierId( );
				view.calculateValue( Community.getComunityOfShopKeeper( store.getId( ), supplier ) );

				int shopKeeperId = ( ( User )request.getSession( ).getAttribute( "user" ) ).getCompanyId( );
				// StoreList storesList = new StoreList(shopKeeperId);
				//request.setAttribute("storesList", storesList.getStores());
				request.setAttribute( "view", view );


				SupplierProduct supplierProduct = new SupplierProduct( view.getProductId( ) );

				// voy a mirar si el producto tiene imagen
				boolean hasImage = false;
				String path = getServletContext( ).getRealPath( supplierProduct.getImage( ) );
				File file = new File( path );
				if( file.isFile( ) )
				{
					hasImage = true;
				}
				else
				{
					hasImage = false;
				}

				request.setAttribute( "hasImage", new Boolean( hasImage ) );

			}
			else
			{
				message = MessageBuilder.buildMessage( 15 );
				url = "/index.jsp";
			}
			String operation = ( String )request.getAttribute( "operationType" );
			if( operation != null && operation.equals( "purchase" ) )
			{
				message = ( String )request.getAttribute( "message" );
			}
		}
		catch( Exception e )
		{
			url = "/logout";
			message = MessageBuilder.buildMessage( 15 );
		}

		request.setAttribute( "message", message );

		RequestDispatcher dispatcher = getServletContext( ).getRequestDispatcher( url );
		dispatcher.forward( request, response );

	}

	/**
	 * Procesa el método HTTP <code>GET</code>.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
			IOException
	{
		processRequest( request, response );
	}

	/**
	 * Procesa el método HTTP <code>POST</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
			IOException
	{
		processRequest( request, response );
	}

	/**
	 * Retorna una breve descripción de el servlet.
	 * 
	 * @return
	 */
	public String getServletInfo( )
	{
		return "Short description";
	}

}