package cn.pluss.platform.userInfo;

import java.util.List;
import java.util.Map;

import cn.pluss.platform.dto.ChangePwdDTO;
import cn.pluss.platform.entity.MerchantOrder;
import cn.pluss.platform.entity.UserApp;
import cn.pluss.platform.entity.UserInfo;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.mapper.UserInfoMapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @author djh
 */
public interface UserInfoService extends IService<UserInfo> {

    UserInfo getMainUserInfo(Long id);

    /**
     * 注册
     *
     * @param userInfo 用户信息
     */
    void register(UserInfo userInfo);

    /**
     * 忘记密码
     * @param userInfo 用户信息
     */
    void forgetPwd(UserInfo userInfo);

    /**
     * 保存安全密码
     * @param userInfo 用户信息
     */
    void savePayPassword(UserInfo userInfo);

    /**
     * 校验支付密码
     * @param payPassword 支付密码
     */
    void apiVerifyPayPassword(String payPassword);

    /**
     * 校验支付密码
     * @param userId        用户id
     * @param payPassword   支付密码
     */
    void verifyPayPassword(Long userId, String payPassword);

    /**
     * 绑定邀请码
     * @param inviteCode
     */
    void bindInviteCode(String inviteCode);

    default UserInfo queryUserInfo(UserInfo userInfo) {
        return ((UserInfoMapper) getBaseMapper()).queryUserInfo(userInfo);
    }

    default List<UserInfo> queryUserInfoList(UserInfo userInfo) {
        return ((UserInfoMapper) getBaseMapper()).queryUserInfoList(userInfo);
    }

    default Integer saveUserInfo(UserInfo userInfo) {
        return ((UserInfoMapper) getBaseMapper()).saveUserInfo(userInfo);
    }

    default void updateUserInfo(UserInfo userInfo) {
        ((UserInfoMapper) getBaseMapper()).updateUserInfo(userInfo);
    }

    default void deleteUserInfo(UserInfo userInfo) {
        ((UserInfoMapper) getBaseMapper()).deleteUserInfo(userInfo);
    }

    default List<UserInfo> queryUserInfoPage(Map<String, Object> map) {
        return ((UserInfoMapper) getBaseMapper()).queryUserInfoPage(map);
    }

    default Integer queryUserInfoPageCount(Map<String, Object> map) {
        return ((UserInfoMapper) getBaseMapper()).queryUserInfoPageCount(map);
    }

    /**
     * 修改手机号
     */
    void changePhone(ChangePwdDTO changePwdDTO) throws MsgException;

    /**
     * 登录
     *
     * @param loginName 用户手机号
     * @param password  用户密码
     * @return 个人信息
     */
    Map<String, Object> login(String loginName, String password);

    /**
     * 修改费率
     *
     * @param userId
     * @param rate
     */
    void changeRate(String userId, Integer rate);

    void apiChangeRate(String userId, Integer rate);

    JSONObject getUserMerchantBaseInfo();

    /**
     * 确认人脸识别已经通过
     */
    void appVerifyFaceCert();

    void verifyFaceCert(Long userId);

    /**
     * @description:发送订单支付模板消息
     * @date: 2021/9/24 11:42
     * @param order:
     */
    void sendPayWxTemplateMessage(MerchantOrder order);

    /**
     * 根据登录账号获取用户信息
     * @date: 2022/3/1 18:11
     * @param loginName:
     * @return cn.pluss.platform.entity.UserInfo
     */
    UserInfo getUserInfoByLoginName(String loginName);

}

