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.dao.MemberDao; // 导入MemberDao接口，用于访问会员数据
import com.cn.dao.impl.MemberDaoImpl; // 导入MemberDao接口的实现类，用于具体的数据库操作
import com.cn.domain.Member; // 导入Member类，该类定义了会员的数据结构
import com.cn.domain.Pmember; // 导入Pmember类，该类定义了会员个人信息的数据结构
import com.cn.service.MemberService; // 导入MemberService接口，该接口定义了会员服务的方法
import com.cn.service.PmemberService; // 导入PmemberService接口，该接口定义了会员个人信息服务的方法
import com.cn.service.impl.MemberServiceImpl; // 导入MemberService接口的实现类，用于具体的会员业务操作
import com.cn.service.impl.PmemberServiceImpl; // 导入PmemberService接口的实现类，用于具体的会员个人信息业务操作
import com.cn.util.DateUtil; // 导入DateUtil类，提供日期时间工具方法

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

    /**
     * 默认构造函数。
     */
    public AddMemberServlet() {
        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 {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath()); // 响应客户端请求，显示服务路径
	}

	/**
	 * 处理POST请求的方法。
	 * @param request HttpServletRequest对象，包含客户端的请求信息
	 * @param response HttpServletResponse对象，包含服务器对客户端的响应信息
	 * @throws ServletException 抛出Servlet异常
	 * @throws IOException 抛出输入输出异常
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String userName = request.getParameter("userName"); // 从请求中获取会员用户名参数
		String password = request.getParameter("password"); // 从请求中获取会员密码参数
		
		MemberDao memberDao = new MemberDaoImpl(); // 创建MemberDao的实现类对象，用于会员数据访问
		MemberService memberService = new MemberServiceImpl(memberDao); // 创建MemberService的实现类对象，用于会员业务操作
		
		PrintWriter out = response.getWriter(); // 获取PrintWriter对象，用于向客户端发送响应
		// 校验用户名是否已经存在
		if(memberService.getMemberByName(userName) == null) { // 如果会员不存在
			// 不存在，可以创建会员
			
			// 创建会员对象，将信息添加到member表
			Member member = new Member(userName, password, DateUtil.now(), 0, DateUtil.now()); // 创建会员对象，并设置相关属性
			int countNumber = memberService.addMember(member); // 调用MemberService的addMember方法添加会员，并返回影响的记录数
			
			if(countNumber == 1) { // 如果添加会员成功（影响的记录数为1）
				
				// 将会员个人信息存储到pmember表
				Pmember pmember = new Pmember(); // 创建Pmember对象，用于封装会员个人信息
				Integer memberId = memberService.getMemberByName(userName).getMemberId(); // 根据用户名获取会员ID
				pmember.setMemberId(memberId); // 设置会员ID
				
				String realName = request.getParameter("realName"); // 从请求中获取会员真实姓名参数
				String sex = request.getParameter("sex"); // 从请求中获取会员性别参数
				Integer age = Integer.valueOf(request.getParameter("age")); // 从请求中获取会员年龄参数，并转换为Integer类型
				String idCard = request.getParameter("idCard"); // 从请求中获取会员身份证号码参数
				
				pmember.setRealName(realName); // 设置会员真实姓名
				pmember.setSex(sex); // 设置会员性别
				pmember.setAge(age); // 设置会员年龄
				pmember.setIdCard(idCard); // 设置会员身份证号码
				
				PmemberService pmemberService = new PmemberServiceImpl(); // 创建PmemberService的实现类对象，用于会员个人信息业务操作
				pmemberService.add(pmember); // 调用PmemberService的add方法添加会员个人信息
				
				out.write("<script>alert('添加会员成功！');window.location.href='MemberCenterServlet'</script>"); // 向客户端发送JavaScript代码，弹出提示并跳转到会员中心页面
			} else { // 如果添加会员失败
				out.write("<script>alert('添加会员失败！');window.location.href='pages/admin/right/addMember.jsp'</script>"); // 向客户端发送JavaScript代码，弹出提示并跳转到添加会员页面
			}
			
		} else { // 如果会员已存在
			out.write("<script>alert('用户名已存在，请重新输入！');window.location.href='pages/admin/right/addMember.jsp'</script>"); // 向客户端发送JavaScript代码，弹出提示并跳转到添加会员页面
		}
		
		out.close(); // 关闭PrintWriter对象
	}
}