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

import com.baomidou.mybatisplus.extension.service.IService;
import com.zanxiang.game.module.manage.pojo.dto.KfWebSocketMsgDTO;
import com.zanxiang.game.module.manage.pojo.params.KfWebSocketMsgParam;
import com.zanxiang.game.module.mybatis.entity.KfRoom;
import reactor.util.function.Tuple2;

import java.util.List;

/**
 * @author : lingfeng
 * @time : 2024-02-23
 * @description : 客服聊天房间
 */
public interface IKfRoomService extends IService<KfRoom> {

    /**
     * 分页获取已结束房间列表
     *
     * @param gameId   : 游戏id
     * @param pageBean : 分页信息
     * @return : 返回分页数据
     */
    Tuple2<KfWebSocketMsgDTO.PageBean, List<KfWebSocketMsgDTO.RoomBean>> getFinishRoomList(Long gameId, KfWebSocketMsgParam.PageBean pageBean);

    /**
     * 玩家加入房间
     *
     * @param openId : 玩家openId
     * @param gameId : 游戏id
     * @return : 返回关联房间id
     */
    Long userJoinRoom(String openId, Long gameId);

    /**
     * 客服获取游戏列表
     *
     * @return : 返回游戏列表
     */
    List<KfWebSocketMsgDTO.GameBean> getKfGameList();

    /**
     * 根据游戏获取游戏信息
     *
     * @param gameId   : 游戏id
     * @param kfUserId : 客服号id
     * @return : 返回游戏信息
     */
    List<KfWebSocketMsgDTO.GameBean> getKfGameByGameId(Long gameId, Long kfUserId);

    /**
     * 待接入房间列表
     *
     * @param gameId : 游戏id
     * @return : 返回待接入房间列表
     */
    List<KfWebSocketMsgDTO.RoomBean> getOnlineRoomList(Long gameId);

    /**
     * 根据房间id获取房间信息
     *
     * @param roomId : 房间id
     * @return : 返回房间信息
     */
    List<KfWebSocketMsgDTO.RoomBean> getRoomByRoomId(Long roomId);

    /**
     * 获取玩家信息
     *
     * @param openId : 玩家openId
     * @param gameId : 游戏id
     * @return : 返回玩家信息
     */
    KfWebSocketMsgDTO.UserBean getUserBean(String openId, Long gameId);

    /**
     * 分页获取玩家角色列表
     *
     * @param openId   : 玩家openId
     * @param gameId   : 游戏id
     * @param pageBean : 分页信息
     * @return : 返回单页数据
     */
    Tuple2<KfWebSocketMsgDTO.PageBean, List<KfWebSocketMsgDTO.GameRoleBean>> getRoleBeanList(String openId, Long gameId, KfWebSocketMsgParam.PageBean pageBean);

    /**
     * 分页获取玩家订单列表
     *
     * @param openId   : 玩家openId
     * @param gameId   : 游戏id
     * @param pageBean : 分页信息
     * @return : 返回单页数据
     */
    Tuple2<KfWebSocketMsgDTO.PageBean, List<KfWebSocketMsgDTO.OrderBean>> getOrderBeanList(String openId, Long gameId, KfWebSocketMsgParam.PageBean pageBean);
}
