/*
 * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.dto.UpdateShannerProdDTO;
import com.yami.shop.bean.model.ChannelProd;
import com.yami.shop.common.util.PageParam;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * 渠道对应商品管理服务接口
 * @author lgh on 2024/01/01.
 */
public interface ChannelProdService extends IService<ChannelProd> {

    /**
     * 根据渠道ID获取商品列表
     * @param channelId 渠道ID
     * @return 商品列表
     */
    List<ChannelProd> getChannelProdsBychannelId(Long channelId);

    /**
     * 根据SKU ID获取渠道商品列表
     * @param skuId SKU ID
     * @return 渠道商品列表
     */
    List<ChannelProd> getChannelProdsBySkuId(Long skuId);

    /**
     * 根据渠道ID和SKU ID获取渠道商品
     * @param channelId 渠道ID
     * @param skuId SKU ID
     * @return 渠道商品
     */
    ChannelProd getChannelProdBychannelIdAndSkuId(Long channelId, Long skuId);

//    /**
//     * 分页查询渠道商品
//     * @param page 分页参数
//     * @param channelProd 查询条件
//     * @return 分页结果
//     */
//    IPage<ChannelProd> getChannelProdPage(PageParam page, ChannelProd channelProd);

    /**
     * 保存渠道商品
     * @param channelProd 渠道商品
     */
    void saveChannelProd(ChannelProd channelProd);

    /**
     * 更新渠道商品
     * @param channelProd 渠道商品
     */
    void updateChannelProd(ChannelProd channelProd);

    /**
     * 根据ID删除渠道商品
     * @param id 主键ID
     */
    void deleteChannelProdById(Long id);

    /**
     * 根据渠道ID删除渠道商品
     * @param channelId 渠道ID
     */
    void deleteChannelProdsBychannelId(Long channelId);

    /**
     * 根据SKU ID删除渠道商品
     * @param skuId SKU ID
     */
    void deleteChannelProdsBySkuId(Long skuId);

    /**
     * 批量更新渠道商品价格
     * @param channelProds 渠道商品列表
     */
    void updateBatchPrices(List<ChannelProd> channelProds);

    /**
     * 根据渠道ID统计商品数量
     * @param channelId 渠道ID
     * @return 商品数量
     */
    Integer countByChannelId(Long channelId);

    /**
     * 根据SKU ID统计渠道数量
     * @param skuId SKU ID
     * @return 渠道数量
     */
    Integer countBySkuId(Long skuId);

    /**
     * 检查渠道商品是否存在
     * @param channelId 渠道ID
     * @param skuId SKU ID
     * @return 是否存在
     */
    Boolean existsByChannelIdAndSkuId(Long channelId, Long skuId);



    /**
     * 下载渠道商品导入模板
     * @param response HTTP响应
     * @throws IOException IO异常
     */
    void downloadTemplate(HttpServletResponse response);

    /**
     * 导入渠道商品数据
     * @param file 导入文件
     * @return 导入结果
     * @throws IOException IO异常
     */
    String importChannelProds(MultipartFile file);



    /**
     * 设置销售渠道及价格
     * @param updateShannerProdDTO 更新渠道商品价格
     */
    void setUpChannels(UpdateShannerProdDTO updateShannerProdDTO);
}
