/*
 * CartListener.java
 *
 * Created on 10 de agosto de 2004, 18:01
 */

package com.fenalco.servlets.shopkeeper;

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

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.ShoppingCart;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;

/**
 * Este servlet recibe los eventos que se pueden generar en el carrito de compras y los
 * procesa de acuerdo con el valor del parámetro operationType. 
 * @author  andres
 * 
 *
 */
public class CartListener extends HttpServlet {
    
    /** Inicializa el servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    /** Destructor del servlet.
     */
    public void destroy() {
        
    }
    
    /** 
     * Recibe los eventos que se generan en el carrito de compras y con base en 
     * eso, redirecciona a donde sea necesario. Dependiendo del evento, recibe:
     *
     *             evento       -->     parametros
     * - guardar como lista     -->     nombre de la lista
     * - generar cotizacion     -->     nada
     * - hacer pedido           -->     nada
     * - adicionar producto     -->     nada  
     * - modificar cantidad     -->     id del producto y la nueva cantidad
     *
     *
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        HttpSession session = request.getSession(false);
        String url = "";
        String message = "";
        
        try
	    {
	        
	        if( session == null || ( User )session.getAttribute( "user" ) == null || ( ( User )session.getAttribute( "user" ) ).getRoleId() != 3 )
	        {
	            url="/index.jsp";
	            message = MessageBuilder.buildMessage(15);
	        }
	        else
	        {
	            String operationType = "";
	
	            String event = request.getParameter( "event" );
	            
	            ShoppingCart cart = ( ShoppingCart )session.getAttribute( "cart" );
	
	
	            if( event.equals( "modificar_cantidad" ) )
	            {
	                // hay que modificar la cantidad de los productos en el carrito
	                Enumeration params = request.getParameterNames();
	                Vector products = new Vector();
	                while( params.hasMoreElements() )
	                {
	                    String param = ( String )params.nextElement();
	                    if( param.startsWith( "producto" ) )
	                    {
	                        try
	                        {
	                            Integer newQuantity = new Integer( request.getParameter( param ) );
	                            StringTokenizer parts = new StringTokenizer( param, "_" );
	                            parts.nextToken();  // descarto el primer token que es "producto"
	                            Integer supplierId = new Integer( parts.nextToken() );
	                            Integer productId = new Integer( parts.nextToken() );
	                            
	                            // organizo las peticiones de cambio de cantidades
	                            // para enviarlas al otro servlet (CartHandler)
	                            Integer[ ] data = new Integer[ 3 ];
	                            data[ 0 ] = supplierId;
	                            data[ 1 ] = productId;
	                            data[ 2 ] = newQuantity;
	                            
	                            products.addElement( data );
	                        }
	                        catch( Exception e )
	                        {
	
	                        }
	
	                    }
	                }
	                // añado los productos para que el CartHandler los procese
	                request.setAttribute( "products", products );
	                
	                operationType = "quantity";
	                
	            }
	            else if( event.equals( "lista" ) )
	            {
	                operationType = "list";
	                String listName = request.getParameter( "name" );
                        
	                
	                request.setAttribute( "listName", listName );
                        
	            }
	            else if( event.equals( "cotizacion" ) )
	            {
	                operationType = "quote";
	            }
	            else if( event.equals( "pedido" ) )
	            {
                        Hashtable payments = new Hashtable( );
                        Hashtable products = cart.getProducts();
                        Enumeration enumeration = products.keys();
                        while( enumeration.hasMoreElements() )
                        {
                            String provId = ( ( Integer )enumeration.nextElement() ).toString();
                            String paymentId = request.getParameter( "payment_" + provId );
                            System.out.println( "El ID del proveedor es " + provId );
                            System.out.println( "El ID la forma de pago es " + paymentId );
                            payments.put( provId, paymentId );
                        }
                        request.setAttribute( "payments", payments );
	                operationType = "order";
	            }
	            else
	            {
	                System.out.println( "En la MALA" );
	            }
	            url = "/minorista/administrarcarrito";
	            request.setAttribute( "operationType", operationType );
	        }
	    }
        catch( Exception e )
	    {
                e.printStackTrace();
	        url="/logout";
	        message = MessageBuilder.buildMessage(15);
	    }

        request.setAttribute( "message", message );
        RequestDispatcher rd = getServletContext().getRequestDispatcher( url );
        rd.forward(request, response);
    }
    
    /** Procesa el método HTTP <code>GET</code>.
     * @param request servlet request
     * @param response servlet response
     */
    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
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        processRequest(request, response);
    }
    
    /** Retorna una breve descripción del servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
}
