/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;
import DAO.*;
import service.User;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import javax.servlet.http.*;
import javax.servlet.*;




/**
 *
 * @author faycal
 */
public class BddController extends MultiActionController {    
    private String login;
    private String pwd;
    private User utilisateur;
    private HttpSession session;
    public BddController() {}
    
    private void sessionInit(HttpServletRequest request) {
        if (login == null)
            login=request.getUserPrincipal().getName();
        if (utilisateur == null)
            utilisateur =new User(login);
        
        if (session == null) {
            session=request.getSession();
            session.setAttribute("user", utilisateur);
        }
    }
   
    public ModelAndView  menu(HttpServletRequest request,
			HttpServletResponse response){
        sessionInit(request);
        System.out.println ("nbuser="+User.getCompteur());
        return new ModelAndView("menu").addObject("user",utilisateur); 
        
    }
    public ModelAndView  logout(HttpServletRequest request,
			HttpServletResponse response){
        sessionInit(request);
        request.getSession().invalidate();
        
        
        return new ModelAndView("deconnexion"); 
        
    }
    
   public ModelAndView list(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
       sessionInit(request);
       String type = request.getParameter("type");
       ModelAndView mv = new ModelAndView("resultat");
       mv.addObject("user",session.getAttribute("user"));
       mv.addObject("type", type);
       
       switch (type) {
           case "customer":
                mv.addObject("results", new MagasinHelper().getClientsColums());
                mv.addObject("colonnes", Arrays.asList("customerId", "name", "addressline1", "addressline2", "zip", "rate"));
               break;
           case "product":
               mv.addObject("results", new MagasinHelper().getProductsColums());
               mv.addObject("colonnes", Arrays.asList("productId", "manufacturerId", "productCode", "purchaseCost", "quantityOnHand", "markup", "available", "description"));
               break;
           case "purchase":
                mv.addObject("results", new MagasinHelper().getPurchaseColums());
                mv.addObject("colonnes", Arrays.asList("orderNum", "customerId", "productId", "quantity", "shippingCost", "salesDate", "shippingDate", "freightCompany"));
                mv.addObject("relation", new HashMap<String, String>() {{
                    put("customerId", "customer");
                    put("productId", "product");
                }});
                break;
           case "discount":
               mv.addObject("results", new MagasinHelper().getDiscountCodesColums());
               mv.addObject("colonnes", Arrays.asList("discountCode", "rate"));
               break;
           case "prodCode":
               mv.addObject("results", new MagasinHelper().getProductCodesColums());
               mv.addObject("colonnes", Arrays.asList("prodCode", "discountCode", "description"));
               break;
           default:
               mv.addObject("error", "Type not found");
       }
       
       return mv;
   }
 public ModelAndView add(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
       sessionInit(request);
     
       ModelAndView mv = new ModelAndView("form_inscription");
       
      mv.addObject("user",session.getAttribute("user"));
      mv.addObject("discount",new MagasinHelper().getDiscountCodesColums());
      mv.addObject("code",new MagasinHelper().getZipCode());
      return mv;
   }
 public ModelAndView detail(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
     sessionInit(request);
     String type = request.getParameter("type");
     ModelAndView mv = new ModelAndView("detail");
     mv.addObject("user",session.getAttribute("user"));
     mv.addObject("type", type);
     
     switch (type) {
           case "customer":
                mv.addObject("result", new MagasinHelper().getClient(Integer.parseInt(request.getParameter("num"))));
                mv.addObject("code",new MagasinHelper().getDiscountCodes());
                mv.addObject("cpostaux",new MagasinHelper().getZipCode());
               break;
           case "product":
               mv.addObject("result", new MagasinHelper().getProduct(Integer.parseInt(request.getParameter("num"))));
               mv.addObject("manufacturers", new MagasinHelper().getManufacturers());
               mv.addObject("productCodes", new MagasinHelper().getProductCodes());
               break;
           case "purchase":
                mv.addObject("result", new MagasinHelper().getPurchase(Integer.parseInt(request.getParameter("num"))));
                mv.addObject("customers", new MagasinHelper().getClients());
                mv.addObject("products", new MagasinHelper().getProducts());
                break;
           case "discount":
               mv.addObject("result", new MagasinHelper().getDiscountCode(request.getParameter("num").charAt(0)));
               break;
           case "prodCode":
               mv.addObject("result", new MagasinHelper().getProductCode(request.getParameter("num")));
               mv.addObject("code",new MagasinHelper().getDiscountCodes());
               break;
           default:
               mv.addObject("error", "Type not found");
       }

     return mv;
   }
 public ModelAndView find(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
       sessionInit(request);
     
       ModelAndView mv ;
       MagasinHelper requeteur = new MagasinHelper(); 
       if (requeteur.getClients(request.getParameter("nom")).isEmpty() || request.getParameter("nom").equals("%") ){
           mv= new ModelAndView("error");         
           mv.addObject("erreur", "0 enregistrement"); 
                  
                }
                else{
            mv= new ModelAndView("resultat");
                mv.addObject("liste",requeteur.getClients(request.getParameter("nom")));
               
                }
       
     mv.addObject("user",session.getAttribute("user"));
      return mv;
   }
 public ModelAndView formfind(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
     sessionInit(request);
      return new ModelAndView("recherche");
   }
  public ModelAndView achats(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
      sessionInit(request);
       
     
       ModelAndView mv = new ModelAndView("achats");
       
     mv.addObject("user",session.getAttribute("user"));
     System.out.println("num "+Integer.parseInt(request.getParameter("numero")));
      
      mv.addObject("achats",new MagasinHelper().getPurchase(Integer.parseInt(request.getParameter("numero"))));
      return mv;
   }
   
    public ModelAndView save(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
        sessionInit(request);
       String param1 = request.getParameter("nom");
        String param2 = request.getParameter("adresse");
        String param3 = request.getParameter("telephone");
        String param4 = request.getParameter("email");
        String param5 = request.getParameter("code_remise");
        String param6 = request.getParameter("CP");
        new MagasinHelper().insertCustomer(new MagasinHelper().getMaxId()+1, param5.charAt(0), param6);
       return new ModelAndView("confirm").addObject("confirm","enregistrement effectué");
   
   }
   public ModelAndView delete(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
       sessionInit(request);
       
        new MagasinHelper().deleteCustomer(Integer.parseInt(request.getParameter("numero")));
       return new ModelAndView("confirm").addObject("confirm","suppression effectuée");
   
   }
    public ModelAndView update(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
        sessionInit(request);
        String param1 = request.getParameter("numero");
        String param2 = request.getParameter("code_remise");
        String param3 = request.getParameter("nom");
        String param4 = request.getParameter("adresse");
        String param5 = request.getParameter("telephone");
        String param6 = request.getParameter("email");
        String param7 = request.getParameter("CP");
        System.out.println(request.getParameter("CP"));
       
        new MagasinHelper().updateCustomer(Integer.valueOf(param1),param2.charAt(0),param3,param4,param5,param6,param7);
       return new ModelAndView("confirm").addObject("confirm","mise à jour effectuée");
   
   }
}