package com.red.circle.wallet.domain.gateway;

import com.red.circle.tool.core.tuple.PennyAmount;
import com.red.circle.wallet.domain.salary.SalaryReceipt;
import com.red.circle.wallet.domain.salary.SalaryReceiptRes;
import com.red.circle.wallet.domain.salary.SalaryType;

/**
 * 工资账户 Gateway.
 */
public interface SalaryAccountGateway {

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

  /**
   * 查询可用余额.
   *
   * @param userId 用户ID
   * @param salaryType 工资类型
   * @return 可用余额
   */
  PennyAmount getAvailableBalance(Long userId, SalaryType salaryType);

  /**
   * 变更余额.
   *
   * @param receipt 工资凭证
   * @return 凭证响应
   */
  SalaryReceiptRes changeBalance(SalaryReceipt receipt);
}
