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

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.enums.config.EnumConfigKey;
import com.red.circle.other.inner.model.cmd.sys.SysEnumConfigQryCmd;
import com.red.circle.other.inner.model.dto.sys.EnumConfigDTO;
import com.red.circle.other.inner.model.dto.sys.SysEnumConfigSortDTO;
import java.math.BigDecimal;
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;

/**
 * 枚举参数配置.
 *
 * @author pengliang on 2023/5/25
 */
public interface EnumConfigClientApi {

  String API_PREFIX = "/enum-config/client";

  /**
   * 获取允许返回app配置.
   */
  @GetMapping("/listAppConfig")
  ResultResponse<List<EnumConfigDTO>> listAppConfig(@RequestParam("sysOrigin") String sysOrigin);

  /**
   * 系统枚举参数配置.
   */
  @GetMapping("/getValue")
  ResultResponse<String> getValue(@RequestParam("key") EnumConfigKey key,
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 系统枚举参数配置.
   */
  @GetMapping("/getValue/string")
  ResultResponse<String> getValue(@RequestParam("key") String key,
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取系统枚举信息 转换 int.
   *
   * @return int
   */
  @GetMapping("/value/int")
  ResultResponse<Integer> getValueInt(
      @RequestParam("key") EnumConfigKey key, @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取系统枚举信息 转换 long.
   *
   * @return int
   */
  @GetMapping("/value/long")
  ResultResponse<Long> getValueLong(
      @RequestParam("key") EnumConfigKey key, @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取系统枚举信息 转换 BigDecimal.
   */
  @GetMapping("/value/decimal")
  ResultResponse<BigDecimal> getValueBigDecimal(
      @RequestParam("key") EnumConfigKey key, @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取系统枚举信息 转换 boolean.
   */
  @GetMapping("/value/bool")
  ResultResponse<Boolean> getValueValBool(
      @RequestParam("key") EnumConfigKey key, @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取系统配置枚举参数.
   */
  @GetMapping("/getByCodeEnum")
  ResultResponse<EnumConfigDTO> getByCode(@RequestParam("key") EnumConfigKey key,
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获取系统配置枚举参数.
   */
  @GetMapping("/getByCode")
  ResultResponse<EnumConfigDTO> getByCode(@RequestParam("key") String key,
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 获得礼物金币概率.
   */
  @GetMapping("/giftGoldRatioFormula")
  ResultResponse<BigDecimal> giftGoldRatioFormula(
      @RequestParam("ratio") BigDecimal ratio,
      @RequestParam("gold") BigDecimal gold
  );

  /**
   * aswat 获得礼物金币概率.
   */
  @GetMapping("/getGiftGoldRatio")
  ResultResponse<BigDecimal> getGiftGoldRatio(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin);

  /**
   * ASWAT 获得幸运礼物金币比例.
   */
  @GetMapping("/getLuckyGiftGoldRatio")
  ResultResponse<BigDecimal> getLuckyGiftGoldRatio(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin);

  /**
   * 获得礼物金币概率，送给自己.
   */
  @GetMapping("/getGiftGoldRatioSelf")
  ResultResponse<BigDecimal> getGiftGoldRatioSelf(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin);

  /**
   * 指定类型的配置转换砖石数量.
   */
  @GetMapping("/toDiamondQuantity")
  ResultResponse<BigDecimal> toDiamondQuantity(
      @RequestParam("key") EnumConfigKey key, @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 金币转砖石后的钻石数量.
   *
   * @param gold 金币数量
   * @return 钻石数量
   */
  @GetMapping("/goldsToDiamondQuantity")
  ResultResponse<BigDecimal> goldsToDiamondQuantity(
      @RequestParam("gold") BigDecimal gold, @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 金币转钻石后的钻石数量.
   *
   * @param gold          金币数量
   * @param exchangeRatio 兑换比率
   * @return 钻石数量
   */
  @GetMapping("/goldsToDiamondQuantity/p2")
  ResultResponse<BigDecimal> goldsToDiamondQuantity(
      @RequestParam("gold") BigDecimal gold,
      @RequestParam("exchangeRatio") BigDecimal exchangeRatio
  );

  /**
   * 钻石=金币价值.
   */
  @GetMapping("/getDiamondEqGold")
  ResultResponse<BigDecimal> getDiamondEqGold(@RequestParam("sysOrigin") String sysOrigin);

  /**
   * 钻石兑换倍数.
   */
  @GetMapping("/getDiamondExchangeMultiple")
  ResultResponse<BigDecimal> getDiamondExchangeMultiple(
      @RequestParam("sysOrigin") String sysOrigin);

  /**
   * 钻石兑换最大金币数.
   */
  @GetMapping("/getDiamondExchangeMaxGold")
  ResultResponse<BigDecimal> getDiamondExchangeMaxGold(@RequestParam("sysOrigin") String sysOrigin);


  /**
   * 后台服务.
   */

  @PostMapping("/pageSysEnumConfig")
  ResultResponse<PageResult<EnumConfigDTO>> pageSysEnumConfig(
      @RequestBody SysEnumConfigQryCmd query);

  @GetMapping("/sysEnumConfigList")
  ResultResponse<List<EnumConfigDTO>> sysEnumConfigList(
      @RequestParam("groupName") String groupName);

  @GetMapping("/getViolationAvatar")
  ResultResponse<String> getViolationAvatar(
      @RequestParam("violationPicture") EnumConfigKey violationPicture);

  @PostMapping("/saveSysEnumConfig")
  ResultResponse<Void> saveSysEnumConfig(@RequestBody EnumConfigDTO sysEnumConfig);

  @PostMapping("/updateSysEnumConfig")
  ResultResponse<Void> updateSysEnumConfig(@RequestBody EnumConfigDTO sysEnumConfig);

  @PostMapping("/deleteBySysOriginAndName")
  ResultResponse<Void> deleteBySysOriginAndName(@RequestParam("id") Long id);

  @PostMapping("/updateSort")
  ResultResponse<Void> updateSort(@RequestBody List<SysEnumConfigSortDTO> sysEnumConfigSortParams);

}
