package com.red.circle.other.inner.endpoint.game.api;


import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.model.cmd.game.GameLuckBoxAwardConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.GameLuckBoxBountyConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.GameLuckBoxFortuneValueConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.GameLuckBoxStandardConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.GameLuckyBoxAwardDetailsConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.GameLuckyBoxBountyDetailsConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.GameLuckyBoxStandardDetailsConfigQryCmd;
import com.red.circle.other.inner.model.cmd.game.LuckBoxGameQryCmd;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxAwardConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxAwardDetailsConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxBountyConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxBountyDetailsConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxCountDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxCountInfoDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxFortuneValueConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxGiftConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxStandardConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxStandardDetailsConfigDTO;
import com.red.circle.other.inner.model.dto.game.GameLuckyBoxTimeConfigDTO;
import com.red.circle.other.inner.model.dto.game.LuckyBoxGiftMapDTO;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 游戏lucky服务.
 *
 * @author lisizhe on 2023/11/10
 */
public interface GameLuckyClientApi {

  String API_PREFIX = "/game/lucky/client";

  @PostMapping("/pageLuckyBoxGameRecord")
  ResultResponse<PageResult<GameLuckyBoxCountDTO>> pageLuckyBoxGameRecord(
      @RequestBody LuckBoxGameQryCmd query);

  @PostMapping("/countLuckyBoxGame")
  ResultResponse<GameLuckyBoxCountInfoDTO> countLuckyBoxGame(@RequestBody LuckBoxGameQryCmd query);

  @PostMapping("/getLuckyBoxFortuneValueConfig")
  ResultResponse<GameLuckyBoxFortuneValueConfigDTO> getLuckyBoxFortuneValueConfig(
      @RequestBody GameLuckBoxFortuneValueConfigQryCmd query);

  @PostMapping("/addLuckyBoxFortuneValueConfig")
  ResultResponse<Void> addLuckyBoxFortuneValueConfig(
      @RequestBody GameLuckyBoxFortuneValueConfigDTO param);

  @PostMapping("/pageBountyConfig")
  ResultResponse<PageResult<GameLuckyBoxBountyConfigDTO>> pageBountyConfig(
      @RequestBody GameLuckBoxBountyConfigQryCmd query);

  @PostMapping("/addGameLuckyBoxBountyConfig")
  ResultResponse<Void> addGameLuckyBoxBountyConfig(@RequestBody GameLuckyBoxBountyConfigDTO param);

  @GetMapping("/deleteBountyConfig")
  ResultResponse<Void> deleteBountyConfig(@RequestParam("id") Long id);

  @PostMapping("/getGameLuckyBoxBountyDetailsConfig")
  ResultResponse<List<GameLuckyBoxBountyDetailsConfigDTO>> getGameLuckyBoxBountyDetailsConfig(
      @RequestBody GameLuckyBoxBountyDetailsConfigQryCmd query);

  @PostMapping("/addGameLuckyBoxBountyDetailsConfig")
  ResultResponse<Void> addGameLuckyBoxBountyDetailsConfig(
      @RequestBody GameLuckyBoxBountyDetailsConfigDTO param);

  @GetMapping("/deleteBountyDetailsConfig")
  ResultResponse<Void> deleteBountyDetailsConfig(@RequestParam("id") Long id);

  @PostMapping("/pageAwardConfig")
  ResultResponse<PageResult<GameLuckyBoxAwardConfigDTO>> pageAwardConfig(
      @RequestBody GameLuckBoxAwardConfigQryCmd query);

  @PostMapping("/addGameLuckyBoxAwardConfig")
  ResultResponse<Void> addGameLuckyBoxAwardConfig(@RequestBody GameLuckyBoxAwardConfigDTO param);

  @GetMapping("/deleteAwardConfig")
  ResultResponse<Void> deleteAwardConfig(@RequestParam("id") Long id);

  @PostMapping("/listGameLuckyBoxAwardDetailsConfig")
  ResultResponse<List<GameLuckyBoxAwardDetailsConfigDTO>> listGameLuckyBoxAwardDetailsConfig(
      @RequestBody GameLuckyBoxAwardDetailsConfigQryCmd query);

  @PostMapping("/addGameLuckyBoxAwardDetailsConfig")
  ResultResponse<Void> addGameLuckyBoxAwardDetailsConfig(
      @RequestBody GameLuckyBoxAwardDetailsConfigDTO param);

  @GetMapping("/deleteAwardDetailsConfig")
  ResultResponse<Void> deleteAwardDetailsConfig(@RequestParam("id") Long id);

  @PostMapping("/pageStandardConfig")
  ResultResponse<PageResult<GameLuckyBoxStandardConfigDTO>> pageStandardConfig(
      @RequestBody GameLuckBoxStandardConfigQryCmd query);

  @PostMapping("/addStandardConfig")
  ResultResponse<Void> addStandardConfig(@RequestBody GameLuckyBoxStandardConfigDTO param);

  @GetMapping("/switchStatus")
  ResultResponse<Void> switchStatus(@RequestParam("id") Long id,
      @RequestParam("status") Boolean status);

  @GetMapping("/deleteStandardConfig")
  ResultResponse<Void> deleteStandardConfig(@RequestParam("id") Long id);

  @PostMapping("/getGameLuckyBoxStandardDetailsConfig")
  ResultResponse<List<GameLuckyBoxTimeConfigDTO>> getGameLuckyBoxStandardDetailsConfig(
      @RequestBody GameLuckyBoxStandardDetailsConfigQryCmd query);

  @PostMapping("/getGameLuckyBoxGiftConfig")
  ResultResponse<List<GameLuckyBoxGiftConfigDTO>> getGameLuckyBoxGiftConfig(
      @RequestBody GameLuckyBoxStandardDetailsConfigQryCmd query);

  @PostMapping("/mapLuckyBoxGiftMap")
  ResultResponse<List<LuckyBoxGiftMapDTO>> mapLuckyBoxGiftMap(
      @RequestBody GameLuckyBoxStandardDetailsConfigQryCmd query);

  @PostMapping("/addGameLuckyBoxGiftConfig")
  ResultResponse<Void> addGameLuckyBoxGiftConfig(@RequestBody GameLuckyBoxGiftConfigDTO param);

  @PostMapping("/addGameLuckyBoxStandardDetailsConfig")
  ResultResponse<Void> addGameLuckyBoxStandardDetailsConfig(
      @RequestBody GameLuckyBoxStandardDetailsConfigDTO param);
}
