package com.cn.servlet; // 定义Servlet所在的包名

import java.io.IOException; // 导入IOException，用于处理输入输出异常
import java.io.PrintWriter; // 导入PrintWriter，用于向客户端发送字符文本数据

import javax.servlet.ServletException; // 导入ServletException，用于处理Servlet运行时的异常
import javax.servlet.http.HttpServlet; // 导入HttpServlet，是所有HTTP servlet的父类
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest，代表客户端的请求信息
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse，代表服务器对客户端的响应信息

import com.cn.domain.Train; // 导入Train类，该类定义了车次的数据结构
import com.cn.service.PrepService; // 导入PrepService接口，该接口定义了订单服务的方法
import com.cn.service.TrainService; // 导入TrainService接口，该接口定义了车次服务的方法
import com.cn.service.impl.PrepServiceImpl; // 导入PrepService接口的实现类，用于具体的订单业务操作
import com.cn.service.impl.TrainServiceImpl; // 导入TrainService接口的实现类，用于具体的车次业务操作

/**
 * ChangePrepServlet类，用于处理会员改签业务的请求。
 * @ClassName: ChangePrepServlet 类名：ChangePrepServlet
 * @Description: 会员改签业务
 * @author: ljy Servlet的作者
 * @date: 2019年9月30日 下午5:53:36 Servlet创建的日期和时间
 */
public class ChangePrepServlet extends HttpServlet {
	private static final long serialVersionUID = 1L; // 用于序列化

    /**
     * 默认构造函数。
     */
    public ChangePrepServlet() {
        super(); // 调用父类的构造函数
        // TODO Auto-generated constructor stub
    }

	/**
	 * 处理GET请求的方法，用于执行改签业务。
	 * @param request HttpServletRequest对象，包含客户端的请求信息
	 * @param response HttpServletResponse对象，包含服务器对客户端的响应信息
	 * @throws ServletException 抛出Servlet异常
	 * @throws IOException 抛出输入输出异常
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		// 从请求中获取订单ID，这是从UpdatePrepServlet传递过来的，用于改签业务
		Integer prepId = (Integer) request.getAttribute("prepId");
		
		// 创建订单服务对象
		PrepService prepService = new PrepServiceImpl();
		// 创建车次服务对象
		TrainService trainService = new TrainServiceImpl();
		// 根据订单ID获取车次ID，用于后续更改车次座位数
		Integer trainId = prepService.getById(prepId).getTrainId();
		
		// 删除原订单
		int recordNumber = 0;
		recordNumber = prepService.delete(prepId); // 根据订单ID删除订单

		// 获取PrintWriter对象，用于向客户端发送响应
		PrintWriter out = response.getWriter();
		if (recordNumber == 1) {
			// 如果订单删除成功，更新车次的座位数
			Train train = trainService.getById(trainId); // 根据车次ID获取车次对象
			train.setSeatNumber(train.getSeatNumber() + 1); // 座位数加1
			trainService.update(train); // 更新车次对象

			// 将改签开始的信息存储到会话中，告知BookingServlet这是改签操作
			request.getSession().setAttribute("changePrep", "true");

			// 向客户端发送JavaScript代码，弹出提示并跳转到车次查询页面
			out.write("<script>alert('请您选择新的车次！');" + 
					"window.location.href='GetByStartEndStationServlet'</script>");
		} else {
			// 如果订单删除失败，向客户端发送JavaScript代码，弹出提示并跳转到我的订单页面
			out.write("<script>alert('很抱歉，改签失败！');" + 
					"window.location.href='MyPrepServlet'</script>");
		}
	}

}