package com.jwipc.supplier.client;

import cn.hutool.core.lang.Pair;
import com.jwipc.page.PageView;
import com.jwipc.supplier.clent.dto.*;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * <p> </p>
 *
 * @author ZhangJie
 * @version 1.0
 * @since JDK 1.8
 */
 public interface SupplierClient {
    /**
     * 查询供应商名称
     *
     * @param supplierId 供应商id
     * @return
     */
     String getSupplierName(Long supplierId);

    /**
     * 初始化供应商账号，慎用
     *
     * @return
     */
     SupplierDTO getSupplierById(Serializable id);

    /**
     * 初始化供应商账号，慎用
     *
     * @return
     */
     List<SupplierDTO> getSupplierByIds(Collection<? extends Serializable> idList);

    /**
     * 通过供应编码获取供应商
     *
     * @return
     */
     List<SupplierDTO> getSupplierByCodes(Collection<String> codes);

    /**
     * 通过供应编码获取供应商
     *
     * @return
     */
     SupplierDTO getSupplierByCode(String code);

    /**
     * 初始化供应商账号，慎用
     *
     * @return
     */
     List<SupplierDTO> getAllSupplier();

    /**
     * 供应商品类和营业执照接口
     *
     * @param supplierCode 供应商编号
     * @param companyCode  公司编号
     * @return 数据
     */
     Pair<String, SupplierPurchaseCategoryDTO> getSupplierPurchaseCategory(String supplierCode,
                                                                                 String companyCode);

    Pair<String, SupplierPurchaseCategoryDTO> getSupplierPurchaseCategory(String supplierCode,
                                                                          String companyCode,String paymentTerms);


     PageView getSupplierList(String param);


     List<SupplierBankDTO> supplierBankDate(String contractSupplierCode);

     SupplierCountDTO countSupplier();

    /**
     * 根据供应商编码与物料编码查询供应商物料清单
     *
     * @param supplierCode
     * @param materialCode
     * @return
     */
     SupplierAvlBaseDTO findSupplierAvlItem(String supplierCode, String materialCode);

    /**
     * 根据供应商编码与物料编码查询供应商物料清单
     *
     * @param supplierCode
     * @param materialCode
     * @return
     */
     SupplierAvlBaseDTO getAvlForPrint(String supplierCode, String materialCode, String productName, String mpn);

    /**
     * 获取供应商联系人信息
     *
     * @param supplierCode 供应商编码
     * @param type         联系人类型 见字典 supplier_role_type
     * @return
     */
     SupplierContactsDTO getDefaultContact(String supplierCode, String type);

    /**
     * 获取供应商联系人
     * @param supplierCode 供应商编码
     * @param type 联系人类型
     * @return 联系人集合
     */
     List<SupplierContactsDTO> getContactBySupplierCodeAndType(String supplierCode, Integer type);

    /**
     * 获取供应商代理信息
     *
     * @param supplierCode 当前供应商编号
     * @return 是否是代理商
     */
     Pair<Boolean, List<SupplierDTO>> getAgentList(String supplierCode);

     List<SupplierContactsDTO> getContactList(Collection<? extends Serializable> idList);

    SupplierTemplateDTO getSupplierDefaultTemplate();

    List<SupplierPurchaseCategoryDTO> getList(String supplierId);

    CustomerInfoClientDTO getCustomerInfoByCode(String code);

    List<SupplierPurchaseCategoryDTO> getListBySupplierIds(Collection<? extends Serializable> supplierIds);
    List<SupplierPurchaseCategoryDTO> getListBySupplierIdsAndCompanyCode(Collection<? extends Serializable> supplierIds,String companyCode);

    List<SupplierPurchaseCategoryDTO> getFirstListBySupplierIds(Collection<? extends Serializable> supplierIds);

    SupplierInvitaionDTO getRecommander(Long supplierId);
}
