package com.pangu.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.pangu.common.core.page.TableDataInfo;
import com.pangu.member.domain.dto.MemberDTO;
import com.pangu.member.domain.entity.Member;
import com.pangu.member.domain.vo.MemberVO;

/**
 * 会员服务接口
 * @author pangu
 */
public interface IMemberService extends IService<Member> {

    /**
     * 查询会员列表
     * @param memberDTO 查询条件
     * @return 分页结果
     */
    TableDataInfo selectMemberList(MemberDTO memberDTO);

    /**
     * 根据ID获取会员详情
     * @param memberId 会员ID
     * @return 会员详情
     */
    MemberVO getMemberById(Long memberId);

    /**
     * 新增会员
     * @param memberDTO 会员信息
     * @return 结果
     */
    int insertMember(MemberDTO memberDTO);

    /**
     * 修改会员
     * @param memberDTO 会员信息
     * @return 结果
     */
    int updateMember(MemberDTO memberDTO);

    /**
     * 删除会员
     * @param memberId 会员ID
     * @return 结果
     */
    int deleteMember(Long memberId);

    /**
     * 重置密码
     * @param memberId 会员ID
     * @return 新密码
     */
    String resetPassword(Long memberId);

    /**
     * 修改会员状态
     * @param memberId 会员ID
     * @param status 状态
     * @return 结果
     */
    int changeStatus(Long memberId, String status);

    /**
     * 绑定学生
     * @param memberId 会员ID
     * @param studentId 学生ID
     * @return 结果
     */
    int bindStudent(Long memberId, Long studentId);

    /**
     * 解绑学生
     * @param memberId 会员ID
     * @param studentId 学生ID
     * @return 结果
     */
    int unbindStudent(Long memberId, Long studentId);

    /**
     * 检查手机号是否唯一
     * @param phone 手机号
     * @param memberId 会员ID（编辑时排除自己）
     * @return 是否唯一
     */
    boolean checkPhoneUnique(String phone, Long memberId);

    /**
     * 校验会员是否可删除
     * @param memberId 会员ID
     * @return 是否可删除
     */
    boolean checkCanDelete(Long memberId);

    /**
     * 根据手机号查询会员
     * @param phone 手机号
     * @return 会员信息
     */
    Member getMemberByPhone(String phone);

    /**
     * 根据OpenID查询会员
     * @param openId 微信OpenID
     * @return 会员信息
     */
    Member getMemberByOpenId(String openId);

    /**
     * 根据手机号查询或创建会员
     * @param phone 手机号
     * @return 会员ID
     */
    Long getOrCreateMemberByPhone(String phone);
}
