package com.zanxiang.game.module.sdk.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zanxiang.game.module.mybatis.entity.User;
import com.zanxiang.game.module.sdk.pojo.dto.UserDTO;
import com.zanxiang.game.module.sdk.pojo.param.BindPhoneParam;
import com.zanxiang.game.module.sdk.pojo.param.FindPasswordParam;
import com.zanxiang.game.module.sdk.pojo.param.UpdatePasswordParam;
import com.zanxiang.game.module.sdk.pojo.param.UserData;
import com.zanxiang.game.module.sdk.pojo.vo.CustomerVO;
import com.zanxiang.game.module.sdk.pojo.vo.UserVO;
import com.zanxiang.module.util.pojo.ResultVO;

/**
 * @author : lingfeng
 * @time : 2022-06-08
 * @description : 用户信息
 */
public interface IUserService extends IService<User> {

    /**
     * 忘记密码找回
     *
     * @param param    : 修改密码的参数
     * @param userData : 用户信息
     * @return {@link ResultVO}<{@link Boolean}>
     */
    ResultVO<Boolean> findPassword(FindPasswordParam param, UserData userData);

    /**
     * 用户重置密码
     *
     * @param updatePasswordParam : 修改密码的参数
     * @param userData            : userData
     * @return {@link ResultVO}<{@link Boolean}>
     */
    ResultVO<Boolean> updatePassword(UpdatePasswordParam updatePasswordParam, UserData userData);

    /**
     * 用户绑定手机
     *
     * @param param    : 绑定手机参数
     * @param userData : userData
     * @return {@link ResultVO}<{@link Boolean}>
     */
    ResultVO<Boolean> bindPhone(BindPhoneParam param, UserData userData);

    /**
     * 获取用户信息
     *
     * @param userData : 用户信息
     * @return {@link UserVO}
     */
    UserVO getUserDetail(UserData userData);

    /**
     * 用户获取游戏客服信息
     *
     * @param userData : userData
     * @return {@link CustomerVO}
     */
    CustomerVO getUserCustomer(UserData userData);

    /**
     * 根据手机号获取用户信息
     *
     * @param mobile : 用户手机号
     * @param gameId : 游戏id
     * @return {@link UserDTO}
     */
    UserDTO getUserInfoByMobile(String mobile, Long gameId);

    /**
     * 根据openId查询用户信息
     *
     * @param gameId : 游戏id
     * @param openId : 微信小游戏openId
     * @return {@link UserDTO}
     */
    UserDTO getUserByOpenId(Long gameId, String openId);

    /**
     * 根据openId查询用户信息
     *
     * @param userId : 用户id
     * @return {@link UserDTO}
     */
    UserDTO getUserByUserId(Long userId);
}
