package servlet.admin;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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 java.sql.Connection;

import javabean.Base;
import javabean.Util;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * Servlet 实现类，用于查询管理员列表
 *
 * 该 Servlet 会查询数据库中所有管理员的信息，并将其返回给前端。
 */
@WebServlet("/admin/managerList")
public class ManagerList extends HttpServlet {

	/**
	 * 处理 GET 请求，查询管理员列表
	 *
	 * 该方法会查询数据库中 `manager` 表的所有记录，并返回管理员的 ID、名称、账号、密码和邮箱等信息。
	 *
	 * @param req 请求对象
	 * @param resp 响应对象
	 * @throws ServletException 如果发生 Servlet 错误
	 * @throws IOException 如果发生 I/O 错误
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 设置响应内容类型为 JSON
		resp.setContentType("application/json; charset=utf8");

		// 初始化数据库连接相关变量
		Connection connection = null;
		PreparedStatement pstmt = null;
		String sql = "";
		ResultSet resultSet = null;

		// 返回的数据初始化
		int code = 1;  // 默认为失败
		String msg = "error";  // 默认为错误信息
		JSONObject jsonObject = new JSONObject();  // 存储单条管理员信息
		JSONArray jsonArray = new JSONArray();  // 存储所有管理员信息
		PrintWriter out = resp.getWriter();

		try {
			// 获取数据库连接
			connection = (Connection) Base.getConnection();

			// SQL 查询语句：查询所有管理员信息
			sql = "select * from manager";
			pstmt = connection.prepareStatement(sql);
			resultSet = pstmt.executeQuery();

			// 遍历查询结果，将每条管理员信息加入 JSON 数组
			while (resultSet.next()) {
				jsonObject.put("id", resultSet.getString("id"));        // 管理员ID
				jsonObject.put("name", resultSet.getString("name"));    // 管理员名称
				jsonObject.put("account", resultSet.getString("account"));  // 管理员账号
				jsonObject.put("password", resultSet.getString("password"));  // 管理员密码
				jsonObject.put("email", resultSet.getString("email"));  // 管理员邮箱
				jsonArray.add(jsonObject);  // 将该管理员信息加入 JSON 数组
			}

			// 检查是否成功查询到管理员信息
			if (!jsonArray.isEmpty()) {
				code = 0;  // 查询成功
				msg = "查询成功";
			} else {
				msg = "数据为空";  // 查询结果为空
			}
		} catch (ClassNotFoundException e) {
			msg = "class找不到";  // 类加载失败
		} catch (SQLException e) {
			msg = "sql错误";  // SQL 执行错误
		}

		// 返回 JSON 响应
		out.print(Util.jsonResponse(code, msg, jsonArray.toString()));
	}
}
