/*
 * ShopKeeperStarter.java
 *
 * Created on 10 de agosto de 2004, 17:51
 */

package com.fenalco.servlets.shopkeeper;

import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

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.Store;
import com.fenalco.entities.StoreList;
import com.fenalco.entities.SuperOffer;
import com.fenalco.entities.SuperOfferList;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;

/**
 * Esta clase es la encargada de cargar los elementeos que van formar parte del
 * JSP de inicio para el minorista.
 * 
 * @author Mario Linares
 *  
 */
public class ShopKeeperStarter extends HttpServlet
{

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

	}

	/**
	 * Destructor del servlet.
	 */
	public void destroy( )
	{

	}

	/**
	 * Procesa las solicitudes para ambos métodos HTTP <code>GET</code> y
	 * <code>POST</code>. Este método carga los elementos necesarios para el
	 * JSP de incio del minorista y los agrega como atributos del response que
	 * recibe la página minorista.jsp . Estos elementos son: - lista de las
	 * SuperOfertas que aparecerán en la primera página del minorista - lista de
	 * proveedores que tiene relación comercial con el minorista - lista de las
	 * categorías de productos habilitadas en el sistema - lista con los últimos
	 * pedidos realizados por el minorista Para tal efecto debe crear instancias
	 * de las clases SuperOfferList, SupplierList, ProductCategoryList y
	 * OrderList ( está última con la función latestOrderList).
	 * 
	 * 
	 * @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/minorista.jsp";
        HttpSession session = request.getSession( false );
        String message = "";

	    try
	    {
	        if( session == null || ( User )session.getAttribute( "user" ) == null || ( ( User )session.getAttribute( "user" ) ).getRoleId() != 3 )
			{
				message = MessageBuilder.buildMessage(15);
				url = "/index.jsp";
			}
			else
			{
				User user = (User) request.getSession().getAttribute("user");
				Store store = (Store) request.getSession().getAttribute("store");
				int shopKeeperId = user.getCompanyId();
				int storeId = 0;
		
				String select = request.getParameter("storeId");
				StoreList stores = new StoreList(shopKeeperId);
		
				if( store == null )
				{
					Hashtable temp = stores.getStores();
					if( temp.size() > 0 )
					{
						Enumeration en = temp.keys();
						storeId = ((Integer) en.nextElement()).intValue();
		
					}
				}
				else
				{
					if( select != null )
					{
						storeId = Integer.parseInt(select);
					}
					else
					{
						storeId = store.getId();
					}
		
				}
		
				//cargar superofertas para mostrar en la página inicial del minorista
				SuperOfferList superOffers = new SuperOfferList(shopKeeperId, 1,
						storeId);
				//filtrar lista de superofertas para mostrar solo las activas (no
				// vencidas)
				superOffers.filter(1);
				//filtrar lista de superofertas para mostrar solo aquellas que tengan
				// escalas
				superOffers.filterValids(storeId);
				Vector view = new Vector();
				int pageId = 0;
				String page = request.getParameter("page");
		
				if( page != null )
				{
					pageId = Integer.parseInt(page);
				}
		
				Enumeration en = superOffers.getSuperOffers().elements();
		
				int i = 0;
				while( en.hasMoreElements() )
				{
					SuperOffer temp = (SuperOffer) en.nextElement();
					if( i == pageId * 2 || i == ((pageId * 2) + 1) )
					{
		
						temp.calculateValue(Community.getComunityOfShopKeeper(storeId,
								temp.getSupplierId()));
						view.add(temp);
					}
					i++;
				}
		
				request.setAttribute("view", view);
				request.setAttribute("totalPages", new Double(Math.ceil(superOffers
						.getSize() / 2)));
		
				Store shopKeeperStore = new Store(storeId);
				request.getSession().setAttribute("store", shopKeeperStore);
		
				request.setAttribute("storeId", new Integer(storeId));
				request.setAttribute("stores", stores.getStores());
			}
	    }
	    catch( Exception e )
	    {
	        url="/logout";
	        message = MessageBuilder.buildMessage(15);
	    }

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

	/**
	 * Procesa el método <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>.
	 * 
	 * @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 del servlet.
	 * 
	 * @return
	 */
	public String getServletInfo( )
	{
		return "Short description";
	}

}