package servlet.admin;

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

/**
 * Servlet 实现类，用于删除借阅卡及相关借书记录
 *
 * 该 Servlet 处理管理员请求删除借阅卡及与之相关的借书记录操作。接收借阅卡 ID，先删除该借阅卡
 * 的所有借书记录，再删除借阅卡本身，并返回删除结果。
 */
@WebServlet("/admin/cardDel")
public class CardDel extends HttpServlet {

	/**
	 * 处理 GET 请求，删除借阅卡及相关借书记录
	 *
	 * 该方法接收借阅卡 ID，删除借阅卡及与之相关的借书记录，最终返回操作结果（成功或失败）。
	 *
	 * @param req 请求对象
	 * @param resp 响应对象
	 * @throws ServletException 如果发生 Servlet 错误
	 * @throws IOException 如果发生 I/O 错误
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 设置响应内容类型为 JSON，字符编码为 UTF-8
		resp.setContentType("application/json; charset=utf8");

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

		// 初始化数据库连接和 SQL 语句
		Connection connection = null;
		PreparedStatement delCardPstmt = null;
		PreparedStatement delHistoryPstmt = null;
		String delCardSql = null;
		String delHistorySql = null;
		int delCardResult = 0;
		int delHistoryResult = 0;

		// 初始化返回信息
		String code = "1";
		String msg = "error";
		JSONObject jsonObject = new JSONObject();
		JSONObject jsonData = new JSONObject();

		// 如果传入的 ID 不为空，开始处理删除操作
		if(id != null && !id.equals("")) {
			try {
				// 获取数据库连接
				connection = (Connection) Base.getConnection();

				// 删除借书记录
				delHistorySql = "delete from borrow_books where card_id=?";
				delHistoryPstmt = connection.prepareStatement(delHistorySql);
				delHistoryPstmt.setString(1, id);
				delHistoryResult = delHistoryPstmt.executeUpdate();
				// 返回删除的借书记录数
				jsonData.put("num", delHistoryResult);

				// 删除借阅卡
				delCardSql = "delete from borrow_card where id=? limit 1";
				delCardPstmt = connection.prepareStatement(delCardSql);
				delCardPstmt.setString(1, id);
				delCardResult = delCardPstmt.executeUpdate();

			} catch (ClassNotFoundException e) {
				msg = "连接失败";
			} catch (SQLException e) {
				msg = "sql错误";
			} finally {
				// 关闭数据库资源
				try {
					delCardPstmt.close();
					Base.closeResource(connection, delCardPstmt, null);
				} catch (SQLException e) {
					msg = "关闭失败";
				}
			}
		}

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

		// 判断删除操作是否成功
		if(delCardResult == 1) {
			code = "0";
			msg = "删除借阅证成功";
		}

		// 返回 JSON 格式的响应
		jsonObject.put("code", code);
		jsonObject.put("msg", msg);
		jsonObject.put("data", jsonData);
		out.print(jsonObject.toString());
	}
}
