package com.trade.admin.trade.exportrebate.service;

import com.trade.admin.trade.exportrebate.dto.ExportTaxRefundBatchRequest;
import com.trade.admin.trade.exportrebate.dto.ExportTaxRefundDetailsRequest;
import com.trade.common.core.page.GridPage;
import com.trade.service.trade.exportrebate.dto.*;
import com.trade.service.trade.exportrebate.dto.search.TaxRebateExportAbstractInfoSearchDto;
import com.trade.service.trade.exportrebate.dto.search.TaxRebatePurchaseAbstractInfoSearchDto;
import com.trade.service.trade.exportrebate.dto.search.TaxRebateSummarySearchDto;

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

/**
 * 出口退税服务接口
 *
 * @author hlb
 * @since 2024-10-22 15:46:46
 */
public interface ExportTaxRebateService {

    /**
     * 出口退税明细合计数据查询（代理模式下）
     *
     * @param search
     * @return
     */
    TaxRebateTotalDataDto getTaxRebateTotalDataBySearch(TaxRebateSummarySearchDto search);

    /**
     * 出口退税明细汇总数据查询(代理模式下）
     *
     * @param search
     * @return
     */
    GridPage<TaxRebateSummaryDataDto> getTaxRebateSummaryDataPagesBySearch(TaxRebateSummarySearchDto search);

    /**
     * 出口退税出口明细摘要信息分页查询（代理模式下）
     *
     * @param search
     * @return
     */
    GridPage<TaxRebateExportAbstractInfo> getTaxRebateExportAbstractInfoPagesBySearch(
            TaxRebateExportAbstractInfoSearchDto search);

    /**
     * 出口退税进货明细摘要信息分页查询（代理模式下）
     *
     * @param search
     * @return
     */
    GridPage<TaxRebatePurchaseAbstractInfo> getTaxRebatePurchaseAbstractInfoPagesBySearch(
            TaxRebatePurchaseAbstractInfoSearchDto search);

    /**
     * 获取小图退税链接
     * 
     * @param xtUserId
     * @param xtEid
     * @return
     */
    String getTaxRebateUrl(String xtUserId, String xtEid);

    /**
     * 获取退税到账金额（批量选择申报批次）
     * 
     * @param request
     * @return
     */
    BigDecimal getRefundAmountForDeclarationBatch(ExportTaxRefundBatchRequest request);

    /**
     * 出口退税款确认（批量选择申报批次）
     * 
     * @param request
     * @return
     */
    Boolean refundExportTaxForDeclarationBatch(ExportTaxRefundBatchRequest request);

    /**
     * 获取退税到账金额（批量选择商品）
     * 
     * @param request
     * @return
     */
    BigDecimal getRefundAmountForExportDetails(List<TaxRebateExportAbstractInfo> request);

    /**
     * 出口退税款确认（批量选择商品）
     * 
     * @param request
     * @return
     */
    Boolean refundExportTaxForExportDetails(ExportTaxRefundDetailsRequest request);

    /**
     * 出口退税入账审核通过
     * 
     * @param detailIds
     * @return
     */
    Boolean refundExportTaxAuditPassed(List<Long> detailIds);
}
