package com.ff.game.api;



import com.ff.game.api.request.*;
import com.ff.game.domain.GameBettingDetails;
import com.ff.game.domain.GameFreeRecord;

import java.util.List;

/**
 * 游戏数据解析服务
 *
 * @author shi
 * @date 2024/10/21
 */
public interface IGamesService {


    /**
     * 获取密钥
     *
     * @param gamesBaseRequestDTO 游戏请求dto
     * @return {@link String }
     */
    String getKey(GamesBaseRequestDTO gamesBaseRequestDTO);

    /**
     * 创建成员
     *
     * @param createMemberRequestDTO 创建成员请求dto
     * @return {@link Boolean }
     */
    Boolean createMember(CreateMemberRequestDTO createMemberRequestDTO);


    /**
     * 获取会员信息
     *
     * @param memberInfoRequestDTO 会员信息请求dto
     * @return {@link MemberInfoResponseDTO }
     */
    MemberInfoResponseDTO  getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO);

    /**
     * 无重定向登录
     *
     * @param gamesLogin 游戏登录
     * @return {@link String }
     */
    String loginWithoutRedirect(GamesLogin gamesLogin);



    /**
     * 获取游戏列表
     *
     * @param gamesBaseRequestDTO 游戏请求dto
     * @return {@link String }
     */
    String   getGameList(GamesBaseRequestDTO gamesBaseRequestDTO);


    /**
     * 按代理id进行交换转账
     *
     * @param exchangeTransferMoneyRequestDTO 外汇转账moeny dto
     * @return {@link Long }
     */
    String  exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO);


    /**
     * 按时间获取投注记录
     *
     * @param betRecordByTimeDTO 按时间dto投注记录
     * @return {@link Boolean }
     */
    Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO);


    /**
     * 赠送免费局数
     *
     * @param createFreeSpinRequest 创建自由旋转请求
     * @return {@link Boolean }
     */
    Boolean     createFreeSpin(CreateFreeSpinRequestDTO createFreeSpinRequest);

    /**
     * 获取游戏详细信息
     *
     * @param getGameDetailRequestDTO 获取游戏详细信息请求dto
     * @return {@link GetGameDetailResponseDTO }
     */
    GetGameDetailResponseDTO  getGameDetail(GetGameDetailRequestDTO getGameDetailRequestDTO);


    /**
     * 强制会员从游戏注销
     *
     * @param kickMemberRequestDTO 踢会员请求dto
     * @return {@link Boolean }
     */
    Boolean  kickMember(KickMemberRequestDTO kickMemberRequestDTO);

    /**
     * 踢成员全部
     *
     * @param kickMemberAllDTO 踢成员全部dto
     * @return {@link Boolean }
     */
    Boolean  kickMemberAll(KickMemberAllDTO kickMemberAllDTO);
    /**
     * 免费游戏玩家使用的纪录
     *
     * @param getFreeSpinDashflowRequestDTO 获取自由旋转dashflow请求dto
     * @return {@link List }<{@link GameFreeRecord }>
     */
    List<GameFreeRecord>   getFreeSpinDashflow(GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO);

    /**
     * 取消赠送免费局数
     *
     * @param cancelFreeSpinRequestDTO 取消免费旋转请求
     * @return {@link Boolean }
     */
    Boolean cancelFreeSpin(CancelFreeSpinRequestDTO cancelFreeSpinRequestDTO);



    /**
     * 数据构建
     *
     * @param gamesDataBuildDTO 数据
     * @return {@link GameBettingDetails }
     */
    GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO);

}
