package servlet.admin;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import javabean.Admin;
import net.sf.json.JSONObject;

/**
 * 管理员登录Servlet
 *
 * 该Servlet用于处理管理员登录请求，验证账号和密码是否正确，
 * 如果验证成功，则创建会话并返回登录成功信息；否则，返回错误信息。
 *
 */
@WebServlet("/adminLogin")
public class AdminLogin extends HttpServlet {

    /**
     *  处理GET请求
     *
     * 该方法用于处理GET请求，当前未实现，返回一个简单的响应。
     *
     * @param request 传入的HttpServletRequest对象
     * @param response 传入的HttpServletResponse对象
     * @throws ServletException 如果处理请求时发生错误
     * @throws IOException 如果输出时发生错误
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 简单响应，输出请求的上下文路径
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * 处理POST请求
     *
     * 该方法用于处理管理员登录的POST请求，验证提供的用户名和密码，
     * 如果验证成功，创建会话并返回成功信息；如果验证失败，返回错误信息。
     *
     * @param request 传入的HttpServletRequest对象
     * @param response 传入的HttpServletResponse对象
     * @throws ServletException 如果处理请求时发生错误
     * @throws IOException 如果输出时发生错误
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置响应的内容类型为JSON，字符集为utf8
        response.setContentType("application/json; charset=utf8");
        PrintWriter out = response.getWriter();

        // 获取客户端传递的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 创建一个HashMap来存储返回的响应数据
        HashMap<String, Object> hashMap = new HashMap<String, Object>();

        // 创建Admin对象，调用登录方法进行验证
        Admin admin = new Admin();
        String result = null;
        try {
            // 调用Admin类中的login方法验证用户名和密码
            result = admin.login(username, password);
        } catch (ClassNotFoundException | SQLException e) {
            // 捕获并打印异常
            e.printStackTrace();
        }

        // 如果登录成功，返回成功的JSON响应
        if (result != null && result.equals("1")) {
            // 创建会话并设置管理员的用户名
            HttpSession session = request.getSession();
            session.setAttribute("admin", username);

            // 设置响应内容为成功
            hashMap.put("code", 0); // 0表示成功
            hashMap.put("msg", "登录成功");
            // 返回登录成功后的跳转页面（管理员首页）
            hashMap.put("url", request.getContextPath() + "/admin/index.jsp");
        } else {
            // 如果登录失败，返回失败信息
            hashMap.put("code", 1); // 1表示失败
            hashMap.put("msg", result); // 登录失败的提示信息
        }

        // 将HashMap转化为JSON对象并返回给客户端
        JSONObject json = JSONObject.fromObject(hashMap);
        out.write(json.toString());
    }

}
