package com.uas.platform.b2b.service;

import com.uas.platform.b2b.erp.model.Inquiry;
import com.uas.platform.b2b.erp.model.QuotationDown;
import com.uas.platform.b2b.model.*;
import com.uas.platform.core.model.PageInfo;
import com.uas.search.b2b.model.SPage;
import org.springframework.data.domain.Page;

import java.util.List;

public interface PurchaseInquiryService {

	/**
	 * 附件ID写到询价单
	 * 
	 * @return
	 */
	public void saveAttach(List<Attach> attachs);

	/**
	 * 分页查找询价单
	 * 
	 * @param pageInfo
	 * @param keyword
	 *            查找关键词
	 * @return
	 */
	public Page<PurchaseInquiryItem> findAllByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);

	/**
	 * 分页查找询价单
	 * 
	 * @param pageInfo
	 * @param keyword
	 * @param filter
	 * @return
	 */
	public SPage<PurchaseInquiryItem> findByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);

	/**
	 * 用询价单ID查找询价单
	 * 
	 * @param id
	 * @return
	 */
	public List<PurchaseInquiryItem> findById(Long id);

	/**
	 * 用询价单明细ID查找询价单明细
	 * 
	 * @param id
	 * @return
	 */
	public PurchaseInquiryItem findItemByItemId(Long itemId);

	/**
	 * 查找所有待上传到买家ERP的报价信息
	 * 
	 * @return
	 */
	List<PurchaseInquiryItem> findNotUploadReply();

	/**
	 * 报价信息成功传到买家ERP之后
	 * 
	 * @param idArray
	 */
	public void onReplyUploadSuccess(String[] idArray);

	/**
	 * 报价信息（不）采纳之后，写到平台
	 * 
	 * @param inquiryItems
	 */
	public void onReplyDecide(List<PurchaseInquiryItem> inquiryItems);

	/**
	 * 查找所有待上传到卖家ERP的客户询价明细
	 * 
	 * @return
	 */
	List<PurchaseInquiryItem> findNotUploadInquiry();

	/**
	 * 查找所有待上传到卖家ERP的报价信息
	 * 
	 * @return
	 */
	List<PurchaseInquiryItem> findNotUploadInquiryReply();

	/**
	 * 平台的客户询价单传到供应商ERP之后，修改平台里面的询价单的上传状态
	 * 
	 * @param idArray
	 */
	public void onQuotationDownSuccess(String[] idArray);

	/**
	 * 平台的客户询价单的报价信息传到供应商ERP之后，修改平台里面的询价单的报价信息上传状态
	 * 
	 * @param idArray
	 */
	public void onReplyDownSuccess(String[] idArray);

	/**
	 * 保存编辑的回复信息
	 * 
	 * @param inquiryItem
	 */
	public PurchaseInquiryItem save(PurchaseInquiryItem inquiryItem);

	/**
	 * 来自供应商ERP端的报价
	 * 
	 * @param downs
	 */
	public void reply(List<QuotationDown> downs);

	/**
	 * 查找所有待上传到卖家ERP的报价信息的采纳结果
	 * 
	 * @return
	 */
	List<PurchaseInquiryItem> findNotUploadInquiryReplyDecide();

	/**
	 * 平台的客户询价单的报价信息的采纳结果传到供应商ERP之后，修改平台里面的采纳结果上传状态
	 * 
	 * @param idArray
	 */
	public void onReplyDecideDownSuccess(String[] idArray);

	/**
	 * 平台的客户询价单的报价信息的作废处理传到供应商ERP之后，修改平台里面的作废处理上传状态
	 *
	 */
	void onReplyInvalidDownSuccess(String[] split);

	/**
	 * 买家在收到报价信息后，点击提交按钮后，状态传至平台，至此平台的供应商不能再对这张询价单进行报价
	 * 
	 * @param sourceIds
	 */
	public void check(Long[] sourceIds);

	/**
	 * 买家在收到报价信息后，点击提交按钮后，状态传至平台，至此平台的供应商不能再对这张询价单进行报价
	 *
	 * @param sourceIds
	 */
	public void reCheck(Long[] sourceIds);
	
	/**
	 *  修改作废状态
	 * @param inquiries
	 */
    void onReplyInvalid(List<Inquiry> inquiries);

	/**
	 * 根据询价单明细id返回询价单明细
	 * @param itemId 询价单明细id
	 * @return
	 */
	PurchaseInquiryItem getInquiryItemByItemId(Long itemId);

	/**
	 * 不使用关键词搜索时，从数据库直接获取已失效询价单列表
	 * @param pageInfo 页面参数
	 * @param keyword 关键词
	 * @param filter 搜索过滤条件
	 * @return
	 */
    SPage<PurchaseInquiryItem> findInvalidByPageInfo(PageInfo pageInfo, String  keyword, SearchFilter filter);

    /**
     * 不使用关键词搜索时，从数据库直接获取待报价询价单列表
     * @param pageInfo 页面参数
     * @param keyword 关键词
     * @param filter 搜索过滤条件
     * @return
     */
    SPage<PurchaseInquiryItem> findTodoByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);

    void saveList(List<PurchaseInquiryItemTemp> purchaseInquiryItemTemps);

	/**
	 * 查找所有待上传到卖家ERP的报价信息的作废决定
	 *
	 * @return
	 */
	List<PurchaseInquiryItem> findNotUploadInquiryReplyInvalid();

    /**
     * B2B回复报价
     *
     * @param inquiryItem
     */
    public PurchaseInquiryItem reply(PurchaseInquiryItem inquiryItem);
}
