package com.cn.service.impl; // 定义服务实现类的包名

import java.sql.SQLException; // 导入SQLException，用于处理数据库操作中可能抛出的异常
import java.util.List; // 导入List接口，用于操作列表集合

import com.cn.dao.MemberDao; // 导入MemberDao接口，用于访问会员数据
import com.cn.dao.impl.MemberDaoImpl; // 导入MemberDao接口的实现类，用于具体的数据库操作
import com.cn.domain.Member; // 导入Member类，该类定义了会员的数据结构
import com.cn.service.MemberService; // 导入MemberService接口，该接口定义了会员服务的方法

/**
 * 实现MemberService接口的类，提供会员服务的具体实现。
 * @description 会员服务实现类，用于处理会员相关的业务逻辑。
 * @author lxs 实现类的作者
 * @version 1.0 实现类的版本号
 * @since 1.0 从版本1.0开始存在
 * @date 2019年9月13日 实现类的创建日期
 */
public class MemberServiceImpl implements MemberService {
    private MemberDao memberDao = null; // 成员变量，用于数据库操作的MemberDao对象

    /**
     * 通过依赖注入的方式构造MemberServiceImpl对象。
     * @param memberDao 传入的MemberDao对象，用于数据库操作。
     */
    public MemberServiceImpl(MemberDao memberDao) {
        this.memberDao = memberDao;
    }

    /**
     * 默认无参构造函数，用于在没有依赖注入的情况下创建MemberServiceImpl对象。
     */
    public MemberServiceImpl() {
    }

    /**
     * 添加会员的方法实现。
     * @param member 要添加的会员对象。
     * @return 返回操作的状态码，0表示成功。
     */
    @Override
    public int addMember(Member member) {
        int status = 0; // 状态码，默认为0
        memberDao = new MemberDaoImpl(); // 实例化MemberDao对象
        if (member != null) { // 检查传入的会员对象是否为null
            try {
                status = memberDao.add(member); // 调用MemberDao的add方法添加会员
            } catch (SQLException e) {
                e.printStackTrace(); // 如果发生异常，打印堆栈跟踪
            }
        }
        return status; // 返回操作状态码
    }

    /**
     * 根据会员ID删除会员的方法实现。
     * @param memberId 要删除的会员ID。
     * @return 返回操作的状态码，0表示成功。
     */
    @Override
    public int deleteMember(int memberId) {
        int status = 0; // 状态码，默认为0
        memberDao = new MemberDaoImpl(); // 实例化MemberDao对象
        try {
            status = memberDao.delete(memberId); // 调用MemberDao的delete方法删除会员
        } catch (SQLException e) {
            e.printStackTrace(); // 如果发生异常，打印堆栈跟踪
        }
        return status; // 返回操作状态码
    }

    /**
     * 更新会员信息的方法实现。
     * @param member 包含更新信息的会员对象。
     * @return 返回操作的状态码，0表示成功。
     */
    @Override
    public int updateMember(Member member) {
        int status = 0; // 状态码，默认为0
        memberDao = new MemberDaoImpl(); // 实例化MemberDao对象
        if (member != null) { // 检查传入的会员对象是否为null
            try {
                status = memberDao.update(member); // 调用MemberDao的update方法更新会员信息
            } catch (SQLException e) {
                e.printStackTrace(); // 如果发生异常，打印堆栈跟踪
            }
        }
        return status; // 返回操作状态码
    }

    /**
     * 获取所有会员信息的方法实现。
     * @return 返回包含所有会员信息的列表。
     */
    @Override
    public List<Member> getAllMember() {
        List<Member> list = null; // 会员列表，默认为null
        memberDao = new MemberDaoImpl(); // 实例化MemberDao对象
        try {
            list = memberDao.getAll(); // 调用MemberDao的getAll方法获取所有会员信息
        } catch (SQLException e) {
            e.printStackTrace(); // 如果发生异常，打印堆栈跟踪
        }
        return list; // 返回会员列表
    }

    /**
     * 根据会员ID获取会员信息的方法实现。
     * @param memberId 要查询的会员ID。
     * @return 返回包含指定会员ID的会员对象。
     */
    @Override
    public Member getMemberById(int memberId) {
        Member member = null; // 会员对象，默认为null
        memberDao = new MemberDaoImpl(); // 实例化MemberDao对象
        try {
            member = memberDao.getMemberById(memberId); // 调用MemberDao的getMemberById方法根据ID获取会员信息
        } catch (SQLException e) {
            e.printStackTrace(); // 如果发生异常，打印堆栈跟踪
        }
        return member; // 返回会员对象
    }

    /**
     * 根据用户名获取会员信息的方法实现。
     * @param userName 要查询的用户名。
     * @return 返回包含指定用户名的会员对象。
     */
    @Override
    public Member getMemberByName(String userName) {
        Member member = new Member(); // 初始化会员对象
        memberDao = new MemberDaoImpl(); // 实例化MemberDao对象
        try {
            member = memberDao.getMemberByName(userName); // 调用MemberDao的getMemberByName方法根据用户名获取会员信息
        } catch (SQLException e) {
            e.printStackTrace(); // 如果发生异常，打印堆栈跟踪
        }
        return member; // 返回会员对象
    }
}