package com.ruoyi.web.modules.finance.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import com.ruoyi.web.modules.finance.dto.PayAccountSaveDTO;
import com.ruoyi.web.modules.finance.dto.PlatformFundLogQuery;
import com.ruoyi.web.modules.finance.dto.PlatformShopFundRankQuery;
import com.ruoyi.web.modules.finance.dto.PlatformWithdrawSummaryDetailQuery;
import com.ruoyi.web.modules.finance.dto.PlatformWithdrawSummaryQuery;
import com.ruoyi.web.modules.finance.dto.PlatformWithdrawAuditQuery;
import com.ruoyi.web.modules.finance.dto.SellerWithdrawQuery;
import com.ruoyi.web.modules.finance.dto.SellerWithdrawSubmitDTO;
import com.ruoyi.web.modules.finance.dto.WithdrawAuditDTO;
import com.ruoyi.web.modules.finance.vo.FundLogListRowVO;
import com.ruoyi.web.modules.finance.vo.FundOverviewSummaryVO;
import com.ruoyi.web.modules.finance.vo.PayAccountListRowVO;
import com.ruoyi.web.modules.finance.vo.PayAccountOptionVO;
import com.ruoyi.web.modules.finance.vo.PlatformFundOverviewSummaryVO;
import com.ruoyi.web.modules.finance.vo.PlatformShopFundRankRowVO;
import com.ruoyi.web.modules.finance.vo.PlatformWithdrawSummaryDetailRowVO;
import com.ruoyi.web.modules.finance.vo.PlatformWithdrawSummaryRowVO;
import com.ruoyi.web.modules.finance.vo.PlatformWithdrawAuditListRowVO;
import com.ruoyi.web.modules.finance.vo.SellerWithdrawListRowVO;
import com.ruoyi.web.modules.order.domain.BizOrder;

public interface IShopFundService
{
    void settleOrder(BizOrder order);

    Map<String, Object> submitWithdraw(Long shopId, SellerWithdrawSubmitDTO dto, String createBy);

    void approveWithdraw(Long withdrawId, String processRemark, String auditBy);

    void rejectWithdraw(WithdrawAuditDTO dto, String auditBy);

    BigDecimal getAvailableBalance(Long shopId);

    BigDecimal getPendingSettleAmount(Long shopId);

    FundOverviewSummaryVO getOverviewSummary(Long shopId, String username);

    List<FundLogListRowVO> listFundLogs(Long shopId);

    PlatformFundOverviewSummaryVO getPlatformOverviewSummary();

    List<PlatformShopFundRankRowVO> listPlatformShopRanks(PlatformShopFundRankQuery query);

    List<FundLogListRowVO> listPlatformFundLogs(PlatformFundLogQuery query);

    List<PlatformWithdrawSummaryRowVO> listPlatformWithdrawSummary(PlatformWithdrawSummaryQuery query);

    List<PlatformWithdrawSummaryDetailRowVO> listPlatformWithdrawSummaryDetails(
            PlatformWithdrawSummaryDetailQuery query);

    List<SellerWithdrawListRowVO> listSellerWithdraws(Long shopId, SellerWithdrawQuery query);

    List<PlatformWithdrawAuditListRowVO> listPlatformWithdraws(PlatformWithdrawAuditQuery query);

    int countPendingWithdraws();

    List<PayAccountListRowVO> listPayAccounts(Long shopId);

    List<PayAccountOptionVO> listPayAccountOptions(Long shopId);

    void addPayAccount(Long shopId, PayAccountSaveDTO dto, String operator);

    void updatePayAccount(Long shopId, PayAccountSaveDTO dto, String operator);

    void deletePayAccount(Long shopId, Long accountId, String operator);

    void seedContactBankAccountFromEntry(Long shopId, String contactName, String bankAccount, String operator);
}
