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 接收要修改的分类信息，检查分类名是否重复，
 * 如果没有重复则更新该分类的名称和描述。
 */
@WebServlet("/admin/sortEdit")
public class SortEdit extends HttpServlet {

	/**
	 * 处理 POST 请求，编辑指定的书籍分类信息
	 *
	 * 该方法首先检查分类名是否已存在，如果已存在且不是当前分类，则返回错误提示；
	 * 如果分类名合法，则更新分类信息（名称和描述）。
	 *
	 * @param req 请求对象，包含用户提交的数据
	 * @param resp 响应对象，返回操作结果
	 * @throws ServletException 如果发生 Servlet 错误
	 * @throws IOException 如果发生 I/O 错误
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 设置响应类型为 JSON
		resp.setContentType("application/json; charset=utf8");

		// 获取请求中的数据（分类 ID，分类名和描述）
		String id = req.getParameter("id");
		String name = req.getParameter("name");
		String description = req.getParameter("description");

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

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

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

			// 查询分类名是否已经存在（排除当前分类 ID）
			sql = "select count(*) as count from book_sort where name=? and id != ?";
			pstmt = connection.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.setString(2, id);
			resultSet = pstmt.executeQuery();

			// 判断分类名是否重复
			if (resultSet.next()) {
				if (resultSet.getInt("count") > 0) {
					msg = "分类名不能重复"; // 分类名已经存在
				} else {
					// 更新分类名称和描述
					sql = "update book_sort set name=?, description=? where id=?";
					pstmt = connection.prepareStatement(sql);
					pstmt.setString(1, name);
					pstmt.setString(2, description);
					pstmt.setString(3, id);
					result = pstmt.executeUpdate();

					// 根据更新结果返回消息
					if (result == 1) {
						code = 0;
						msg = "修改成功"; // 修改成功
					} else {
						msg = "修改失败"; // 修改失败
					}
				}
			}

		} catch (ClassNotFoundException e) {
			msg = "classnotfound"; // 类未找到错误
		} 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)); // 返回 JSON 响应
	}
}
