/** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    try {
      int result = -1;
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      HttpSession session = request.getSession();

      // Get request parameters for userID and password
      String userName = request.getParameter("userName");
      String password = request.getParameter("password");

      if ((result = LoginDao.validate(userName, password)) != -1) {

        User userObj = UserDAO.getUser(userName);

        // Set session parameters
        session = request.getSession(true);
        session.setAttribute("user", userName);
        session.setAttribute("userID", result);

        // Setting session to expiry in 30 mins
        session.setMaxInactiveInterval(30 * 60);
        Cookie cookieUserName = new Cookie("user", userName);
        cookieUserName.setMaxAge(30 * 60);
        response.addCookie(cookieUserName);

        RequestDispatcher rd;
        if (userObj.getIsAdmin()) {
          rd = request.getRequestDispatcher("AdminServlet");
        } else {
          // Get all discounted products
          request.setAttribute("discountedProductList", this.getAllDiscoutedProducts(result));

          // Get non-discounted products
          request.setAttribute("nonDiscountedProductList", this.getAllNonDiscoutedProducts(result));

          // Get the user membership
          Map<String, String> userCategory = UserDAO.getUserCategory(result);
          request.setAttribute("userCategoryID", Integer.parseInt(userCategory.get("categoryID")));

          rd = request.getRequestDispatcher("loginSuccess.jsp");
        }
        rd.forward(request, response);

      } else {
        request.setAttribute("error", "Invalid Username or Password. Please try again.");
        RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
        rd.include(request, response);
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /** Function to get all the discounted products */
  public List<Product> getAllDiscoutedProducts(int userID) {
    List<Product> discountedProducts = null;
    try {

      discountedProducts = ProductDao.getDiscountedProducts(userID);
      Map<String, String> userCategory = UserDAO.getUserCategory(userID);
      for (int i = 0; i < discountedProducts.size(); i++) {
        double productPrice = discountedProducts.get(i).getProductPrice();
        double x = productPrice * (Double.parseDouble(userCategory.get("categoryDiscount")) / 100);
        double y = productPrice - x;
        discountedProducts.get(i).setProductDiscountedPrice(y);
      }

    } catch (Exception e) {

      e.printStackTrace();
    }
    return discountedProducts;
  }