package cn.ysk.cashier.service.product;

import cn.ysk.cashier.dto.product.TbProductSortCriteria;
import cn.ysk.cashier.pojo.product.TbProduct;
import cn.ysk.cashier.vo.TbProductVo;
import cn.ysk.cashier.dto.product.TbProductDto;
import cn.ysk.cashier.dto.product.TbProductQueryCriteria;

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

/**
 * @author lyf
 * @website https://eladmin.vip
 * @description 服务接口
 * @date 2023-12-11
 **/
public interface TbProductService {

    /**
     * 查询数据分页
     *
     * @param criteria 条件
     * @param isAdmin  是否为后台查询
     * @return Map<String, Object>
     */
    Map<String, Object> queryAll(TbProductQueryCriteria criteria, boolean isAdmin);


    /**
     * 查询所有数据不分页
     *
     * @param criteria 条件参数
     * @return List<TbProductDto>
     */
    List<TbProductDto> queryAlls(TbProductQueryCriteria criteria);

    /**
     * 根据ID查询
     *
     * @param id ID
     * @return TbProductDto
     */
    TbProductDto findById(Integer id);

    TbProductVo findByProductId(Integer id) throws Exception;


    List<TbProduct> findByProductList(List<String> productList);

    /**
     * 创建
     *
     * @param resources /
     * @return TbProductDto
     */
    Object create(TbProductVo resources);

    /**
     * 编辑
     *
     * @param resources /
     */
    void update(TbProductVo resources);

    void upProSort(TbProductSortCriteria param);

    void updateStockNumber(Integer id, Double stockNumber);

    /**
     * 多选删除
     *
     * @param ids /
     */
    void deleteAll(Integer[] ids);

    /**
     * 导出数据
     *
     * @param all      待导出的数据
     * @param response /
     * @throws IOException /
     */
    void download(List<TbProductDto> all, HttpServletResponse response) throws IOException;

    void updateIsHot(Integer id,Integer isStock);

    void updateIsStock(Integer proId, String shopId, Integer isStock);

    /**
     * 增加库存
     *
     * @param productId 商品id
     * @param number    增加数量
     */
    void incrStockNumber(String productId, Integer number);

    /**
     * 返还库存
     * @param productId 商品
     * @param productSkuId sku
     * @param num 数量
     */
    void returnStockByPro(Integer productId, Integer productSkuId, Integer num);

    Object activateProduct(Integer page, Integer size, Integer categoryId, Integer shopId, Integer productId);
}
