package com.red.circle.wallet.app.service;

import com.red.circle.framework.dto.PageResult;
import com.red.circle.wallet.app.dto.clientobject.*;
import com.red.circle.wallet.app.dto.cmd.*;

import java.math.BigDecimal;

/**
 * 工资账户服务.
 */
public interface SalaryAccountService {

  /**
   * 查询余额.
   *
   * @param userId 用户ID
   * @param salaryType 工资类型
   * @return 余额信息
   */
  SalaryAccountBalanceCO getBalance(Long userId, String salaryType);

  /**
   * 发放工资.
   *
   * @param cmd 发放命令
   * @return 发放结果
   */
  SalaryIssueResultCO issueSalary(SalaryIssueCmd cmd);

  /**
   * 提现回退
   *
   * @param cmd 提现命令
   */
  void withdrawRefund(SalaryWithdrawCmd cmd);

  /**
   * 查询流水.
   *
   * @param cmd 查询命令
   * @return 流水列表
   */
  PageResult<SalaryRunningWaterCO> queryRunningWater(SalaryRunningWaterQueryCmd cmd);

    UserBankWithdrawResultCO transferGold(SalaryWithdrawCmd cmd);

  UserBankExchangeGoldResultCO exchangeGold(SalaryWithdrawCmd cmd);

  /**
   * 查询用户累计收入.
   *
   * @param userId 用户ID
   * @param salaryType 工资类型
   * @return 累计收入
   */
  BigDecimal getTotalIncome(Long userId, String salaryType);
}
