package com.red.circle.wallet.inner.endpoint.freight.api;

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.wallet.inner.model.dto.UserFreightBalanceDTO;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 用户货运账户.
 *
 * @author pengliang on 2023/12/26
 */
public interface FreightBalanceClientApi {

  String API_PREFIX = "/freight/balance/client";


  /**
   * 货运账号是否被关闭.
   *
   * @param sysOrigin 平台
   * @param userId    用户id
   * @return true 是 false 否
   */
  @GetMapping("/checkClose")
  ResultResponse<Boolean> checkClose(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin,
      @RequestParam("userId") Long userId
  );

  /**
   * 是否存在货运账户.
   *
   * @param userId 用户id
   * @return true 存在，false 不存在
   */
  @GetMapping("/existsBalance")
  ResultResponse<Boolean> existsBalance(@RequestParam("userId") Long userId);

  /**
   * 累计余额.
   *
   * @param sysOrigin 系统
   * @param userId    用户id
   * @param quantity  数量
   * @return 是否操作成功
   */
  @GetMapping("/incrCandyBalance")
  ResultResponse<Boolean> incrCandyBalance(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin,
      @RequestParam("userId") Long userId,
      @RequestParam("quantity") BigDecimal quantity
  );

  /**
   * 类型消费累计.
   *
   * @param sysOrigin 系统
   * @param userId    用户id
   * @param quantity  数量
   * @return 是否操作成功
   */
  @GetMapping("/decrCandyBalance")
  ResultResponse<Boolean> decrCandyBalance(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin,
      @RequestParam("userId") Long userId,
      @RequestParam("quantity") BigDecimal quantity
  );

  /**
   * 获取糖果余额.
   *
   * @param userId 用户id
   * @return 余额
   */
  @GetMapping("/getAvailableBalance")
  ResultResponse<BigDecimal> getAvailableBalance(@RequestParam("userId") Long userId);

  /**
   * 获取平台货运代理人列表.
   *
   * @param sysOrigin 系统平台
   * @return list
   */
  @GetMapping("/listUserIdBySysOrigin")
  ResultResponse<Set<Long>> listUserIdBySysOrigin(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin);

  /**
   * 获得余额大于1k的货运代理账户.
   *
   * @param sysOrigin 系统
   * @return list
   */
  @GetMapping("/listFreightByBalanceGt1K")
  ResultResponse<List<UserFreightBalanceDTO>> listFreightByBalanceGt1K(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin);

  /**
   * 获得货运代理总充值金币.
   */
  @GetMapping("/getEarnPoints")
  ResultResponse<BigDecimal> getEarnPoints(@RequestParam("userId") Long userId);

  /**
   * 是否为经销商.
   */
  @GetMapping("/checkDealer")
  ResultResponse<Boolean> checkDealer(
      @RequestParam("sysOrigin") SysOriginPlatformEnum sysOrigin,
      @RequestParam("userId") Long userId
  );

  /**
   * 是否为经销商根据id.
   */
  @GetMapping("/checkDealerById")
  ResultResponse<Boolean> checkDealerById(@RequestParam("id") Long id);

  /**
   * 获取经销商卖家数量
   */
  @GetMapping("/selectSellerQuantity")
  ResultResponse<Integer> selectSellerQuantity(
      @RequestParam("freightId") Long freightId,
      @RequestParam("sysOrigin") String sysOrigin
  );

  /**
   * 是否为货运代理角色
   *
   * @param userId 用户id
   * @return true是
   */
  @GetMapping("/checkFreightAgent")
  ResultResponse<Boolean> checkFreightAgent(@RequestParam("userId") Long userId);

  /**
   * 根据用户id获取货运代理
   */
  @GetMapping("/getFreightBalance")
  ResultResponse<UserFreightBalanceDTO> getFreightBalance(@RequestParam("userId") Long userId);

  /**
   * 根据id获取货运代理
   */
  @GetMapping("/getFreightBalanceById")
  ResultResponse<UserFreightBalanceDTO> getFreightBalanceById(@RequestParam("id") Long id);


}
