package com.tashow.cloud.product.service;

import java.util.*;

import com.tashow.cloud.productapi.api.product.dto.*;
import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProPageReqVO;
import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProPropRecycleBinVO;
import com.tashow.cloud.productapi.api.product.vo.sku.*;
import jakarta.validation.*;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.common.pojo.PageParam;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 单品SKU Service 接口
 *
 * @author 芋道源码
 */
public interface SkuService {

    /**
     * 创建单品SKU
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSku(@Valid SkuSaveReqVO createReqVO);

    /**
     * 创建sku扩展服务配置
     *
     * @param skuExtendVO 更新信息
     */
    void createSkuExtend(@Valid SkuExtendVO skuExtendVO);




    /**
     * 创建sku扩展服务配置
     *
     * @param formId 更新信息
     */
    SkuExtendVO getSkuExtend(Integer formId);


    /**
     * 更新单品SKU
     *
     * @param updateReqVO 更新信息
     */
    void updateSku(@Valid SkuSaveReqVO updateReqVO);

    /**
     * 更新sku规格
     *
     * @param skuPropVO 更新信息
     */
    void updateProp(SkuPropVO skuPropVO);


    void  updatePropVal(Long id, String propValue);

    /**
     * 删除规格值
     *
     * @param id 删除规格值
     */
    void deleteProp(Long id);

    /**
     * 禁用规格值
     *
     * @param id 删除规格值
     */
    void disableProp(Long id,Integer state);



    SkuPropInfoVO getSKuPropList(Long prodId);

    PageResult<ProPropRecycleBinVO> getSKuPropRecycleBinList(ProPageReqVO proPageReqVO);
    /**
     * 删除单品SKU
     *
     * @param id 编号
     */
    void deleteSku(Long id);

    /**
     * 批量删除删SKU
     *
     * @param ids
     */
    void deleteSkus(List<Long> ids);

    /**
     * 恢复SKU
     *
     * @param ids
     */
    void restoreSkuList(List<Long> ids);
    /**
     * 恢复规格
     *
     * @param ids
     */
    void restorePropList(List<Long> ids);


    /**
     * 删除单品SKU
     *
     * @param id 编号
     */
    void updatSkuIsShelf(Long id,Integer isShelf);

    /**
     * 批量删除删SKU
     *
     * @param ids
     */
    void updatSkuIsShelfs(List<Long> ids,Integer isShelf);


    /**
     * 获得单品SKU
     *
     * @param id 编号
     * @return 单品SKU
     */
    SkuDO getSku(Long id);



    PageResult<SkuRecycleBinVO> getSkuRecycleBinPageList(SkuPageReqVO pageReqVO);


    PageResult<SkuDO> getSkuPageList(SkuPageReqVO pageReqVO);
    /**
     * 获得单品SKU分页
     *
     * @param pageReqVO 分页查询
     * @return 单品SKU分页
     */
    PageResult<SkuDO> getSkuPage(SkuPageReqVO pageReqVO);


    /**
     * 创建sku扩展服务配置
     *
     * @param skuServiceDetailsList 更新信息
     */
    void updateServiceDetails(List<SkuServiceDetailsDO> skuServiceDetailsList);


    /**
     * 修物料配置
     *
     * @param skuServiceMaterialList 更新信息
     */
    void updateMaterial(List<SkuServiceMaterialDO> skuServiceMaterialList);


    /**
     * 修改接运地址配置
     *
     * @param skuServiceTransportDOList 更新信息
     */
    void updateTransportAdress( List<SkuServiceTransportDO> skuServiceTransportDOList);

    /**
     * 修改配送方式
     *
     * @param skuServiceDeliverList 更新信息
     */
    void updateDeliver(List<SkuServiceDeliverDO> skuServiceDeliverList);
    /**
     * 扣减库存
     * @param skuId 单品ID
     * @param stocksNum 扣减数量
     */
    void reduceStocks(Long skuId, Integer stocksNum);

    /**
     * 增加库存
     * @param skuId 单品ID
     * @param stocksNum 增加数量
     */
    void increaseStocks(Long skuId, Integer stocksNum);
}