
package control;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.SanPham;
import model.ThongTinSanPham;


public class Search extends HttpServlet {
	private static final long serialVersionUID = 2L;
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	response.setContentType("text/html; charset=UTF-8");
    	request.setCharacterEncoding("UTF-8");
	    response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        try {
        	 SanPham c = new SanPham();
        	 String name = request.getParameter("name");
        	 String pageNumberString = request.getParameter("page");
        	 String cate = request.getParameter("cate");
             String catepar = cate;
             if (cate == null || cate.equals("all")){cate = "%"; catepar = "all";}
             String namer =	name.replaceAll("%20", " ");
             namer = namer.replaceAll("[%']", "");
             namer = namer.replaceAll("Đ", "D");
             namer = namer.replaceAll("đ", "d");
        	 int TongRecords =   c.recordsearch(namer, cate);
             int pagen = TongRecords / 9;
             if((TongRecords % 9) != 0) {
                 pagen++;
             }
            
            if (pageNumberString ==null) {pageNumberString = "1";}                    
            int pageNumber = Integer.parseInt(pageNumberString);
            if (pageNumber < 1 || pageNumber > pagen  ){ pageNumber = 1;}
            
           if (name != null) {
        	   String namerl =	name.replaceAll("%20", " ");
        	   namerl = namerl.replaceAll("[%']", "");
        	   namerl = namerl.replaceAll("Đ", "D");
        	   namerl = namerl.replaceAll("đ", "d");
            name= new SanPham().UTFToASCI(namerl);} 
                     
            if (cate != null) {
            String caterl =	 cate.replaceAll("%20", " ");
            caterl = caterl.replaceAll("[%']", "");
            caterl = caterl.replaceAll("Đ", "D");
            caterl = caterl.replaceAll("đ", "d");
            	cate= new SanPham().UTFToASCI(caterl);
            	
            } 
           int limit = 9;
           int offset = TongRecords - 9*pageNumber;
           if (offset < 0 ){offset = 0; limit = TongRecords - 9*(pageNumber-1);}
            List<ThongTinSanPham> sanpham = c.search(limit,offset, name, cate);                                  
            
            request.setAttribute("sanpham", sanpham);
            request.setAttribute("recordbysearchn", pagen);


            RequestDispatcher rd = request.getRequestDispatcher("index.jsp?main=search&cate="+catepar+"&name="+name+"&page="+pageNumber);
            rd.forward(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(Process.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
