package com.trade.client.trade.salescontract.service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.trade.client.trade.salescontract.dto.SalesContractInfoDto;
import com.trade.client.trade.salescontract.dto.SalesUploadContractDto;
import com.trade.common.core.page.GridPage;
import com.trade.service.trade.salescontract.dto.ContractSearchDto;
import com.trade.service.trade.salescontract.dto.ContractTermsDto;
import com.trade.service.trade.salescontract.dto.SalesCommodityDto;
import com.trade.service.trade.salescontract.dto.SalesCommoditySpidDto;
import com.trade.service.trade.salescontract.vo.ImportCommodityVo;
import com.trade.service.trade.salescontract.vo.SalesContractInfoVo;
import com.trade.service.trade.salescontract.vo.SalesContractVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @description:销售服务接口
 * @Author: wanglang
 * @Date: 2024/9/3 19:13
 * @Version: 1.0
 */
public interface SalesService {

    /**
     * 保存销售合同以及商品信息
     * 
     * @param salesContractInfoDto 销售合同以及商品信息
     * @param request 请求信息 文件信息
     * @return 合同id
     */
    Long saveSalesContract(SalesContractInfoDto salesContractInfoDto, HttpServletRequest request);

    /**
     * 保存合同条款
     *
     * @param contractTermsDto 合同条款
     * @return true/false
     */
    Long saveContractTerms(ContractTermsDto contractTermsDto, HttpServletResponse response);

    /**
     * 根据合同id获取销售合同基本信息
     * 
     * @param contractId 合同id
     * @return 销售合同基本信息
     */
    SalesContractInfoVo getSalesContractDetails(Long contractId);

    /**
     * 分页查询销售合同信息
     * 
     * @param contractSearch 合同查询条件
     * @return 销售合同信息
     */
    GridPage<SalesContractVo> getSalesContractPage(ContractSearchDto contractSearch);

    /**
     * 删除销售合同
     * 
     * @param contractId 合同id
     * @return true/false
     */
    Boolean deleteSalesContract(Long contractId);

    /**
     * 保存销售合同以及商品信息
     *
     * @param contractId 合同Id
     * @param request 请求信息 文件信息
     * @return true/false
     */
    Boolean uploadContract(Long contractId, HttpServletRequest request);

    /**
     * 保存销售合同以及商品信息
     *
     * @param salesUploadContractDto
     * @return true/false
     */
    Boolean uploadContract(SalesUploadContractDto salesUploadContractDto);

    /**
     * 下载销售合同
     * 
     * @param contractId
     * @param request
     * @param response
     * @return true/false
     */
    Boolean downloadContract(Long contractId, HttpServletRequest request, HttpServletResponse response);

    /**
     * 导入商品信息
     * 
     * @param file 文件信息
     * @return 商品信息
     */
    ImportCommodityVo importCommodityFile(MultipartFile file);

    /**
     * 根据商品名称和客户id查询销售商品
     *
     * @param name
     * @return List<SalesCommodityDto>
     */
    List<SalesCommodityDto> getXiaoTuCommodityList(String name);

    /**
     * 根据商品名称和客户id查询销售商品
     *
     * @param name
     * @return List<String>
     */
    List<SalesCommoditySpidDto> getXiaoTuCommoditySpidList(String name);

    /**
     * 下载销售合同模板
     * 
     * @param request
     * @param response
     * @return
     */
    Boolean downloadTemplates(HttpServletRequest request, HttpServletResponse response);
}
