package com.sckw.payment.api.dubbo;

import com.sckw.core.web.response.BaseResult;
import com.sckw.core.web.response.HttpResult;
import com.sckw.payment.api.model.WalletFreeze;
import com.sckw.payment.api.model.constant.ChannelEnum;
import com.sckw.payment.api.model.constant.OrderEnum;
import com.sckw.payment.api.model.dto.LedgerCount;
import com.sckw.payment.api.model.dto.SettlementMoney;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface PaymentDubboService {
    /**
     * 销售订单下单时，冻结资金
     *
     * @param payEntId     支付方企业
     * @param channel      渠道
     * @param receiveEntId 收款企业id
     * @param money        订单金额
     * @param tOrderId     贸易订单id
     * @return
     */
    HttpResult freezeMoney(Long payEntId, ChannelEnum channel, Long receiveEntId, BigDecimal money, Long tOrderId);

    /**
     * 确认企业关联的对账单是否存在关联业务
     *
     * @param entId     企业id 托运方或采购方
     * @param entTarget 另一方企业id 承运方或销售方
     * @return 关联的订单号
     */
    Map<OrderEnum, List<String>> checkLedger(Long entId, Long entTarget);

    /**
     * 确认企业关联的结算单是否存在关联业务
     *
     * @param entId     企业id 托运方或采购方
     * @param entTarget 另一方企业id 承运方或销售方
     * @return
     */
    Map<OrderEnum, List<String>> checkSettlement(Long entId, Long entTarget);


    /**
     * 查询集团及主体单位的所有对账单
     * 统计对账数量
     *
     * @param entId 集团id
     * @return
     */
    LedgerCount countLedger(Long entId, List<Long> enterpriseIds);

    //工作台金额统计数据四个接口

    /**
     * 销售统计，以当前日向前推一月、一周
     *
     * @param countType 1-日 2-周 3-月
     * @return
     */
    SettlementMoney countSell(Long entId, Integer countType);

    /**
     * 采购统计，以当前日向前推一月、一周
     *
     * @param countType 1-日 2-周 3-月
     * @return
     */
    SettlementMoney countPurchase(Long entId, Integer countType);

    /**
     * 承运统计，以当前日向前推一月、一周
     *
     * @param countType 1-日 2-周 3-月
     * @return
     */
    SettlementMoney countCarrier(Long entId, Integer countType);

    /**
     * 托运统计，以当前日向前推一月、一周
     *
     * @param countType 1-日 2-周 3-月
     * @return
     */
    SettlementMoney countShipper(Long entId, Integer countType);

    BaseResult<Boolean> freezeMoney(WalletFreeze walletFreeze);

    BaseResult<Boolean> unfreezeMoney(WalletFreeze walletFreeze);

    BaseResult<Boolean> dealMoney(WalletFreeze walletFreeze);
}
