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

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zanxiang.game.module.manage.pojo.dto.UserDTO;
import com.zanxiang.game.module.manage.pojo.params.UserListParam;
import com.zanxiang.game.module.manage.pojo.params.UserUpdateParam;
import com.zanxiang.game.module.manage.pojo.vo.UserListVO;
import com.zanxiang.game.module.manage.pojo.vo.UserVO;
import com.zanxiang.game.module.manage.pojo.vo.UserWeChatVO;
import com.zanxiang.game.module.mybatis.entity.User;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

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

    /**
     * 小游戏导量到H5
     *
     * @param userId 用户id
     * @param mobile 移动
     * @param type   类型
     * @return {@link Boolean}
     */
    Boolean appletToH5(Long userId, String mobile, Integer type);

    /**
     * 获取用户微信
     *
     * @param userId 用户id
     * @return {@link UserWeChatVO}
     */
    UserWeChatVO getUserWeChat(Long userId);

    /**
     * 玩家列表查询
     *
     * @param param : 查询参数
     * @return {@link IPage}<{@link UserListVO}>
     */
    IPage<UserListVO> list(UserListParam param);

    /**
     * 用户信息更新
     *
     * @param param : 用户更新参数
     * @return {@link Boolean}
     */
    Boolean userUpdate(UserUpdateParam param);

    /**
     * 查询玩家详细信息
     *
     * @param userId : 用户id
     * @return {@link UserVO}
     */
    UserVO getUserInfo(Long userId);

    /**
     * 玩家相关条件查询用户信息
     *
     * @param userId           : 用户id
     * @param agentIdList      : 渠道id列表
     * @param userName         : 用户名称
     * @param nickname         : 用户昵称
     * @param regIp            : 用户注册ip
     * @param regTimeBeginDate 注册时间开始日期
     * @param regTimeEndDate   注册时间结束日期
     * @return {@link Map}<{@link Long}, {@link UserDTO}>
     */
    Map<Long, UserDTO> userCondition(Long userId, List<Long> agentIdList, String userName, String nickname,
                                     String regIp, LocalDate regTimeBeginDate, LocalDate regTimeEndDate);

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

    /**
     * 通过用户id
     *
     * @param userIdList 用户id列表
     * @return {@link Map}<{@link Long}, {@link UserDTO}>
     */
    Map<Long, UserDTO> getByUserIds(List<Long> userIdList);
}
