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;

/**
 * Servlet 用于删除书籍分类
 *
 * 该 Servlet 接收要删除的书籍分类的 ID。如果该分类为默认分类（ID 为 1），则不允许删除；
 * 如果不是默认分类，则先将该分类下的书籍的分类 ID 修改为默认分类，然后删除分类记录。
 */
@WebServlet("/admin/sortDel")
public class SortDel extends HttpServlet {

	/**
	 * 处理 GET 请求，删除指定的书籍分类
	 *
	 * 该方法首先检查传入的分类是否是默认分类（ID 为 1），如果是默认分类，则不允许删除。
	 * 如果不是默认分类，首先将该分类下的书籍的分类 ID 修改为默认分类的 ID，然后删除分类记录。
	 *
	 * @param req 请求对象，包含用户提交的数据
	 * @param resp 响应对象，返回操作结果
	 * @throws ServletException 如果发生 Servlet 错误
	 * @throws IOException 如果发生 I/O 错误
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 默认分类 ID 为 1（不允许删除）
		String defaultId = "1";
		resp.setContentType("application/json; charset=utf8");

		// 获取请求参数（分类 ID）
		String id = req.getParameter("id");

		// 数据库操作相关变量
		Connection connection = null;
		PreparedStatement pstmt = null;
		ResultSet resultSet = null;
		int result = 0;
		String sql = "";

		// 返回结果相关变量
		int code = 1; // 默认为失败
		String msg = ""; // 默认为错误消息

		try {
			// 判断是否为默认分类，若是则不允许删除
			if (defaultId.equals(id)) {
				msg = "不能删除未分类";
			} else {
				// 获取数据库连接
				connection = Base.getConnection();

				// 更新该分类下的书籍，将它们的分类 ID 修改为默认分类
				sql = "update books set sort_id=? where sort_id=?";
				pstmt = connection.prepareStatement(sql);
				pstmt.setString(1, defaultId); // 设置新的分类 ID（默认分类）
				pstmt.setString(2, id); // 设置要删除的分类 ID
				result = pstmt.executeUpdate(); // 执行更新操作

				// 删除分类记录
				sql = "delete from book_sort where id=?";
				pstmt = connection.prepareStatement(sql);
				pstmt.setString(1, id); // 设置要删除的分类 ID
				result = pstmt.executeUpdate(); // 执行删除操作

				// 根据删除结果设置返回消息
				if (result == 1) {
					code = 0;
					msg = "删除成功";
				} else {
					msg = "删除失败";
				}
			}

		} catch (ClassNotFoundException e) {
			msg = "class not found"; // 类未找到错误
		} catch (SQLException e) {
			msg = "SQL 错误"; // SQL 错误
		} finally {
			// 关闭数据库资源
			try {
				Base.closeResource(connection, pstmt, resultSet);
			} catch (SQLException e) {
				msg = "关闭失败"; // 资源关闭失败
			}
		}

		// 输出 JSON 格式的响应结果
		PrintWriter out = resp.getWriter();
		out.print(Util.jsonResponse(code, msg, null));
	}
}
