package com.wzj.soopin.member.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.query.ReferenceMemberQuery;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.domain.vo.ReferenceMemberVO;
import org.dromara.common.core.constant.ResultCode;

import java.io.Serializable;
import java.util.List;

public interface IMemberService extends IService<Member> {





    Integer changeStatus(MemberBO dto);

    int updateMark(MemberBO member);

    boolean usernameExists(String username); // 确保这个方法在接口中定义

    /**
     * 是否可以通过手机获取用户
     *
     * @param mobile 手机号
     * @return 操作状态
     */
    Member findByMobile(  String mobile);

    /**
     * 通过用户名获取用户
     *
     * @param username 用户名
     * @return 会员信息
     */
    Member findByUsername(String username);

    /**
     * 修改用户密码
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 操作结果
     */
    Member modifyPass(String oldPassword, String newPassword);

    /**
     * 修改当前会员的手机号
     *
     * @param mobile 手机号
     * @return 操作结果
     */
    boolean changeMobile(String mobile);

    ResultCode updateMemberStatus(List<String> memberIds, Boolean disabled, Integer banDays);



     String getPhoneDecrypted(String phoneEncrypted) ;


     MemberVO getMemberInfo(Serializable id);


     MemberVO  getLoginMemberInfo();


     String updateWechat(MemberBO bo);




    /**
     * 不带租户的获取会员信息
     *
     * @param bo
     * @param page
     * @return
     */
     IPage<MemberVO> getMemberPageList(MemberBO bo, Page<Member> page);


     void syncInfo();

    /**
     * 通过团长ID获取会员信息
     * @param query
     * @return
     */
    Page<ReferenceMemberVO> getByReference(ReferenceMemberQuery query);

    /**
     * 给当前登录会员的手机号发送短信验证码
     * @param templateId
     */
    void smsCode(String templateId);

    /**
     * 账号注销
     * @param smsCode 短信验证码
     */
    void revoked(String smsCode);
}
