package com.kxs.user.biz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kxs.common.core.util.R;
import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
import com.kxs.user.api.dto.kxsapp.app.RegisterDTO;
import com.kxs.user.api.dto.kxsapp.user.*;
import com.kxs.user.api.model.KxsUser;
import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
import com.kxs.user.api.vo.kxsapp.user.UserCodeInfoVO;
import com.kxs.user.api.vo.kxsapp.user.UserInfoVO;
import com.kxs.user.api.vo.kxsapp.userLevel.AmountDetailVO;
import com.kxs.user.api.vo.kxsapp.userLevel.LevelDetailVO;

/**
 * 用户表(KxsSecurityUser)表服务接口
 *
 * @author 快秃顶的码农
 * @since 2023-12-05 13:50:16
 */
public interface KxsUserService extends IService<KxsUser> {

    /**
     * 注册
     *
     * @param registerDTO 注册dto
     * @return {@link R}
     */
    R register(RegisterDTO registerDTO);

    /**
     * 发送验证码
     *
     * @param mobile 电话
     * @return {@link Boolean}
     */
    Boolean sendCode(String mobile);

    /**
     * 忘记PWD
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    Boolean forgetPwd(ForgetPwdDTO param);

    /**
     * 是否设置支付密码
     *
     * @return {@link Boolean}
     */
    Boolean existPayPwd();

    /**
     * 检查支付PWD
     *
     * @param payPwd 支付PWD
     * @return {@link Boolean}
     */
    Boolean checkPayPwd(String payPwd);

    /**
     * 用户代码信息
     *
     * @param userCode 用户代码
     * @return {@link UserCodeInfoVO}
     */
    UserCodeInfoVO userCodeInfo(String userCode);

    /**
     * 验证手势密码
     *
     * @param handPwd 手动PWD
     * @return {@link Boolean}
     */
    Boolean checkHandPwd(String handPwd);

    /**
     * 检查登录密码
     *
     * @param password 密码
     * @return {@link Boolean}
     */
    Boolean checkLoginPwd(String password);

    /**
     * 退出登陆
     *
     * @return {@link Boolean}
     */
    Boolean logout(String tokenValue);

    /**
     * 信息
     *
     * @return {@link UserInfoVO}
     */
    UserInfoVO info();

    /**
     * 更新区域
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    R updateArea(UserUpdateAreaDTO param);

    /**
     * 修改支付 PWD
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    R modifyPayPwd(KxsUser param);

    /**
     * 更新 PWD
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    R updatePwd(UserUpdatePwdDTO param);

    /**
     * 更新登录电话
     *
     * @param param 参数
     * @return {@link R}
     */
    R updateLoginPhone(UserUpdateLoginPhoneDTO param);


    /**
     * 实名认证
     *
     * @param param 参数
     * @return {@link R}
     */
    R realUser(RealUserDTO param);

    /**
     * 实名认证查看
     *
     * @return {@link RealUserInfoVO}
     */
    RealUserInfoVO getRealUserInfo();

    /**
     * 手势密码
     *
     * @param param 参数
     * @return {@link R}
     */
    R handPwd(UserHandPwdDTO param);

    /**
     * 验证身份信息
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    Boolean checkUserInfo(UserCheckUserInfoDTO param);

    /**
     * 修改头像
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    Boolean updateHead(KxsUser param);

    /**
     * 注销账号
     *
     * @return {@link Boolean}
     */
    Boolean removeUser();

    /**
     * 检查用户是否在自己伞下
     *
     * @param userId      用户 ID
     * @param checkUserId 检查用户 ID
     * @return {@link Boolean}
     */
    Boolean checkUserIsChildren(Integer userId, Integer checkUserId);

    /**
     * 根据id获取用户银行卡和实名信息
     *
     * @param userId 用户 ID
     * @return {@link RealUserInfoVO}
     */
    RealUserInfoVO loadUserRealBankById(Integer userId);

    /**
     * 职级详情
     *
     * @return {@link LevelDetailVO}
     */
    LevelDetailVO levelDetail();


}

