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 net.sf.json.JSONObject;

/**
 * Servlet 实现类，用于编辑借阅卡信息
 *
 * 该 Servlet 处理管理员请求编辑借阅卡信息的操作。接收借阅卡 ID 和新的借阅卡信息，更新数据库中对应的记录。
 */
@WebServlet("/admin/cardEdit")
public class CardEdit extends HttpServlet {

	/**
	 * 处理 POST 请求，编辑借阅卡信息
	 *
	 * 该方法接收借阅卡 ID 和新的借阅卡信息（如密码、读者姓名、规则 ID 和状态），
	 * 更新数据库中对应的借阅卡记录，并返回操作结果。
	 *
	 * @param req 请求对象
	 * @param resp 响应对象
	 * @throws ServletException 如果发生 Servlet 错误
	 * @throws IOException 如果发生 I/O 错误
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 设置响应内容类型为 JSON，字符编码为 UTF-8
		resp.setContentType("application/json; charset=utf8");

		// 获取传入的借阅卡参数
		String id = req.getParameter("id");
		String password = req.getParameter("password");
		String reader = req.getParameter("reader");
		String rule_id = req.getParameter("rule_id");
		String status = req.getParameter("status");

		// 初始化数据库连接和 SQL 语句
		Connection connection = null;
		PreparedStatement pstmt = null;
		ResultSet resultSet = null;
		int result = 0;
		String sql = null;

		// 初始化返回信息
		String code = "1";
		String msg = "error";
		JSONObject json = new JSONObject();
		PrintWriter out = resp.getWriter();

		// 判断接收到的参数是否为空
		if(id == null || password == null || reader == null || rule_id == null || status == null ||
				id.equals("") || password.equals("") || reader.equals("") || rule_id.equals("") || status.equals("")) {
			code = "1";
			msg = "参数不能为空";
		} else {
			// 构建更新 SQL 语句
			sql = "update borrow_card set password=?, reader=?, rule_id=?, status=? where id=?";
			try {
				// 获取数据库连接
				connection = (Connection) Base.getConnection();

				// 预编译 SQL 语句并设置参数
				pstmt = connection.prepareStatement(sql);
				pstmt.setString(1, password);
				pstmt.setString(2, reader);
				pstmt.setString(3, rule_id);
				pstmt.setString(4, status);
				pstmt.setString(5, id);

				// 执行更新操作
				result = pstmt.executeUpdate();
			} catch (ClassNotFoundException e1) {
				msg = "数据库连接错误";
			} catch (SQLException e) {
				msg = "SQL 错误";
			} finally {
				try {
					// 关闭数据库连接和资源
					Base.closeResource(connection, pstmt, resultSet);
				} catch (SQLException e) {
					msg = "资源关闭失败";
				}
			}

			// 判断更新操作是否成功
			if(result == 1) {
				code = "0";
				msg = "修改成功";
			}
		}

		// 将返回信息封装成 JSON 格式
		json.put("code", code);
		json.put("msg", msg);

		// 输出响应数据
		out.print(json.toString());
	}
}
