package com.jwipc.inquiry.logic;

import com.jwipc.inquiry.dto.*;
import com.jwipc.inquiry.model.query.InquiryQuoteQuery;
import com.jwipc.page.PageView;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author shenyang.ou
 * @date 2024/2/22 11:35
 * @desc 询价物料供应商
 */
public interface InquiryMaterialSupplierLogic {
    /**
     * 根据询价id查询询价物料供应商（分组）
     */
    List<InquiryMaterialSupplierDTO> getGroupListByInquiryId(Long inquiryId,Integer bidFlag);

    /**
     * 根据询价id和询价物料id查询询价物料供应商
     * @param inquiryId  询价id
     * @param inquiryMaterialId 询价物料id
     * @return 询价物料供应商
     */
    List<InquiryMaterialSupplierDTO> getListByInquiryIdAndInquiryMaterialId(Long inquiryId, Long inquiryMaterialId);

    /**
     * 获取供应商报价列表
     * @param query  参数
     * @return 供应商报价列表
     */
    List<InquiryMaterialSupplierDTO> quoteList(InquiryQuoteQuery query);
    PageView quoteListPage(InquiryQuoteQuery query);

    /**
     * 获取已经报价的供应商列表
     * @param inquiryId 询价id
     * @return 已经报价的供应商列表
     */
    List<AssistantSupplierDTO> getAssistantSupplierByInquiryId(Long inquiryId);

    /**
     * 报价保存
     *
     * @param param 参数
     */
    void saveQuote(InquirySupplierQuoteParamDTO param);

    /**
     * 议价
     * @param param 参数
     */
    void bargain(InquirySupplierBargainParamDTO param);

    /**
     * 议价截止
     * @param param 参数
     */
    void bargainEnd(InquirySupplierBargainParamDTO param);

    /**
     * 定价
     * @param param 参数
     */
    void fixPrice(InquirySupplierBargainParamDTO param);

    void checkEliminateFlag(InquirySupplierBargainParamDTO param);

    /**
     * 计算配额
     * @param param 参数
     */
    void calculateQuota(InquirySupplierCalculateQuotaParamDTO param);

    /**
     * 定价确认
     * @param param 参数
     */
    void fixConfirm(InquirySupplierBargainConfirmParamDTO param);

    /**
     * 主管确认
     * @param param 参数
     */
    void chargeConfirm(InquirySupplierBargainConfirmParamDTO param);

    void quoteExport(HttpServletResponse response, Long inquiryId) throws IOException;
    List<Map<String,String>> quoteImport(MultipartFile file, Long inquiryId);

    /**
     * 获取比价小助手需要的物料供应商信息
     * @param inquiryId 询价id
     * @param supplierCodes 需要查询的供应商
     * @return 比价小助手需要的物料供应商信息
     */
    List<AssistantMaterialSupplierDTO> getAssistantMaterialSupplier(Long inquiryId, Set<String> supplierCodes);

    /**
     * 物料供应商数据补充导入
     * @param file 文件
     */
    void dataImport(MultipartFile file);
    List<Map<String,String>> fixImport(MultipartFile file);

    /**
     * 计算配额
     *
     * @param calculateQuotaDTOS 待计算配额
     * @return 已计算配额
     */
    List<CalculateQuotaDTO> calculateQuotaClient(List<CalculateQuotaDTO> calculateQuotaDTOS);

    /**
     * 通过采购订单编码获取供应商定价的询价物料
     * @param purchaseApplyCode 采购申请单号
     * @param itemNo 采购申请单号
     * @return 询价下的询价物料
     */
    List<InquiryMaterialSupplierClientDTO> getBidInquiryListByPurchaseApplyCode(String purchaseApplyCode, String itemNo);
}
