package servlet.admin;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
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 javabean.Base;
import javabean.Util;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * Servlet 用于查询并返回所有书籍分类的列表。
 *
 * 该 Servlet 从数据库中查询所有书籍分类信息，并将其以 JSON 格式返回。
 */
@WebServlet("/admin/sortList")
public class SortList extends HttpServlet {

	/**
	 * 处理 GET 请求，查询所有书籍分类信息并返回 JSON 格式的响应
	 *
	 * 该方法从数据库查询所有书籍分类，并将其封装为 JSON 格式的响应返回给客户端。
	 * 如果查询成功，返回分类数据；如果查询失败或没有数据，返回相应的错误消息。
	 *
	 * @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;
		ResultSet resultSet = null;
		JSONObject jsonObject = new JSONObject();  // 单个分类信息的 JSON 对象
		JSONArray jsonArray = new JSONArray();     // 分类列表的 JSON 数组

		// 初始化返回状态和消息
		int code = 1;  // 默认为失败
		String msg = "error";  // 默认为错误消息

		String sql = "";
		PrintWriter out = resp.getWriter();  // 获取响应输出流

		// 开始查询数据库
		try {
			// 获取数据库连接
			connection = Base.getConnection();

			// 执行 SQL 查询，查询所有书籍分类信息
			sql = "select * from book_sort";
			pstmt = connection.prepareStatement(sql);
			resultSet = pstmt.executeQuery();

			// 遍历查询结果并将其添加到 JSON 数组中
			while (resultSet.next()) {
				// 获取每个分类的字段值并将其添加到 JSON 对象中
				jsonObject.put("id", resultSet.getString("id"));
				jsonObject.put("name", resultSet.getString("name"));
				jsonObject.put("description", resultSet.getString("description"));

				// 将 JSON 对象添加到 JSON 数组中
				jsonArray.add(jsonObject.toString());
			}

			// 根据查询结果返回相应的消息
			if (!jsonArray.isEmpty()) {
				code = 0;  // 表示成功
				msg = "查询成功";
			} else {
				msg = "数据为空";  // 如果没有数据，返回提示信息
			}

		} catch (ClassNotFoundException e) {
			// 捕获 ClassNotFoundException 错误
			msg = "没找到";
			e.printStackTrace();
		} catch (SQLException e) {
			// 捕获 SQL 错误
			msg = "sql 错误";
		} finally {
			// 关闭数据库资源
			try {
				Base.closeResource(connection, pstmt, resultSet);
			} catch (SQLException e) {
				msg = "关闭失败";
			}
		}

		// 输出 JSON 格式的响应结果
		out.print(Util.jsonResponse(code, msg, jsonArray.toString()));
	}
}
