package com.sckw.transport.api.dubbo;

import com.sckw.transport.api.model.param.ParkingWalletFeeFreezeParam;
import com.sckw.transport.api.model.vo.ParkingWalletFeeFreezeResult;

import java.math.BigDecimal;

/**
 * 服务费远程服务
 */
public interface ParkingWalletFeeRemoteService {

    /**
     * 贸易订单下单时应用收费策略并冻结服务费余额
     *
     * @param param 冻结参数
     * @return 收费策略应用结果
     */
    ParkingWalletFeeFreezeResult applyChargeStrategyFreeze(ParkingWalletFeeFreezeParam param);

    /**
     * 贸易订单审核拒绝时解冻服务费并返还余额
     *
     * @param param 解冻参数
     * @return 解冻结果（含采购方服务费余额）
     */
    ParkingWalletFeeFreezeResult unfreezeChargeStrategy(ParkingWalletFeeFreezeParam param);

    /**
     * 贸易订单完结时结算服务费
     * <p>
     * 先解冻下单冻结的履约中金额，再按「运输净重量 × 采购方当前最优收费策略单价」扣减服务费。
     * 钱包明细备注会记录采用的策略名称及单价描述（如10元/吨）。
     *
     * @param param 结算参数，actualQuantity 为运输净重量
     * @return 结算结果，freezeAmount 为实际扣减金额，chargeStrategyDesc 为采用的策略单价描述
     */
    ParkingWalletFeeFreezeResult settleChargeStrategy(ParkingWalletFeeFreezeParam param);


    /**
     * 查询采购方服务费余额
     *
     * @param proEntId 采购方企业id
     * @param supEntId 供应商企业id
     * @return 服务费余额
     */
    BigDecimal queryServiceFeeBalance(Long proEntId, Long supEntId);
}
