/*
 * 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 popupFlag = (String)request.getAttribute("msg");
        String message = "";

        
        if(popupFlag != null && popupFlag.equals("start")){
            message = "Apreciado minorista: Por favor no olvide selecionar el establecimiento desde el cual " +
                      "usted va a comerciar.";
        }
	    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;
                                boolean flag = false;
		
				String select = request.getParameter("storeId");
				StoreList stores = new StoreList(shopKeeperId);
                                
                                
                                Vector view = new Vector();
				if( store == null )
				{
					
                                        if(stores!= null){
                                            
                                            Vector temp = stores.getStores();
                                            if( temp.size() > 0 )
                                            {
                                                    
                                                    Enumeration en = temp.elements();
                                                    storeId = ((Store) en.nextElement()).getId();

                                            }
                                        }
				}
				else
				{
					if( select != null )
					{
						storeId = Integer.parseInt(select);
                                                flag = true;
					}
					else
					{
						storeId = store.getId();
                                                
					}
		
				}
                                
                                
                                if(storeId == 0){
                                    request.setAttribute("totalPages", new Double(0));
                                    
                                }
                                else {
                                    //cargar superofertas para mostrar en la página inicial del minorista
                                     SuperOfferList superOffers = null;    
                                     if(request.getSession().getAttribute("superOffers")== null || flag){
                                            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);
                                            //filtrar lista de superofertas para mostrar solo aquellas que tengan
                                            //stock > 0
                                            superOffers.filterStock();

                                            //desordenar
                                            superOffers.shuffle();
                                            request.getSession().setAttribute("superOffers", superOffers);
                                    }
                                    else{
                                            superOffers = (SuperOfferList)request.getSession().getAttribute("superOffers");
                                    }
                                    
                                    
                                    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 * 4 || i == ((pageId * 4) + 1)  || i == ((pageId * 4) + 2)  || i == ((pageId * 4) + 3))
                                            {

                                                    temp.calculateValue(Community.getComunityOfShopKeeper(storeId,
                                                                    temp.getSupplierId()));
                                                    view.add(temp);
                                            }
                                            i++;
                                    }
                                    
                                    request.setAttribute("page", new Double(pageId));
                                    request.setAttribute("totalPages", new Double(Math.ceil(superOffers
						.getSize() / 4.0)));
                                    Store shopKeeperStore = new Store(storeId);
                                    request.getSession().setAttribute("store", shopKeeperStore);
                                    request.setAttribute("storeId", new Integer(storeId));
				
                                }
                                
                                request.setAttribute("stores", stores.getStores());		
				request.setAttribute("view", view);
		
				
				
			}
	    }
	    catch( Exception e )
	    {
	        url="/logout";
	        message = MessageBuilder.buildMessage(15);
                e.printStackTrace();
	    }
                request.setAttribute("message", message);
		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);
	}

        private void getSuperOfferList(HttpServletRequest request){
           
        
        }
        
	/**
	 * Retorna una breve descripción del servlet.
	 * 
	 * @return
	 */
	public String getServletInfo( )
	{
		return "Short description";
	}

}