package com.seer.teach.pay.api.wallet;

import com.seer.teach.pay.api.ApiConstants;
import com.seer.teach.pay.api.wallet.dto.CoinConfigRespDTO;
import com.seer.teach.pay.api.wallet.dto.CoinToAmountRespDTO;
import com.seer.teach.pay.api.wallet.dto.UserCoinAccountBalanceReqDTO;
import com.seer.teach.pay.api.wallet.dto.UserCoinAccountRespDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;

@FeignClient(name = ApiConstants.SERVER_NAME,contextId = "coinAccountServiceApi",path = "/seer/pay")
public interface CoinAccountServiceApi {

    /**
     * 获取用户账户
     *
     * @param userId 用户ID
     * @return 用户账户
     */
    @GetMapping("/wallet/coin-account")
    UserCoinAccountRespDTO getUserCoinAccount(@RequestParam("userId") Integer userId);

    /**
     *  添加余额
     *
     * @param reqDTO 请求参数，包含用户ID，账户ID，操作金额
     * @return 是否成功, true:成功, false:失败
     */
    @PutMapping("/wallet/coin-account/add-balance")
    boolean addBalance(@RequestBody UserCoinAccountBalanceReqDTO reqDTO);

    /**
     * 扣除余额
     *
     * @param reqDTO 请求参数，包含用户ID，账户ID，操作金额
     * @return 是否成功, true:成功, false:失败
     */
    @PutMapping("/wallet/coin-account/deduct-balance")
    boolean deductBalance(@RequestBody UserCoinAccountBalanceReqDTO reqDTO);

    /**
     * 学豆转金额
     *
     * @param coin 学豆数量
     * @return 对应的金额信息
     */
    @GetMapping("/wallet/coin-account/convert")
    CoinToAmountRespDTO convertCoinToAmount(@RequestParam("coin") String coin);

    /**
     * 获取启用且最新的学豆配置
     *
     * @return 启用且最新的 CoinConfigEntity 配置
     */
    @GetMapping("/wallet/coin-config/latest")
    CoinConfigRespDTO getActiveAndLatestCoinConfig();
}