package com.ycwl.basic.product.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ycwl.basic.product.capability.ProductTypeCapability;
import com.ycwl.basic.product.dto.ProductTypeCapabilityRequest;

import java.util.List;

/**
 * 商品类型能力配置管理服务接口
 * 用于管理端的配置管理功能
 */
public interface IProductTypeCapabilityManagementService {

    /**
     * 分页查询商品类型能力配置
     *
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param productType 商品类型代码（可选，支持模糊查询）
     * @param category 商品分类（可选）
     * @param isActive 是否启用（可选）
     * @return 分页结果
     */
    Page<ProductTypeCapability> queryByPage(int pageNum, int pageSize,
                                            String productType, String category, Boolean isActive);

    /**
     * 查询所有商品类型能力配置
     *
     * @param includeInactive 是否包含禁用的配置
     * @return 配置列表
     */
    List<ProductTypeCapability> queryAll(boolean includeInactive);

    /**
     * 根据分类查询商品类型能力配置
     *
     * @param category 商品分类
     * @return 配置列表
     */
    List<ProductTypeCapability> queryByCategory(String category);

    /**
     * 根据ID查询配置详情
     *
     * @param id 配置ID
     * @return 配置详情
     */
    ProductTypeCapability getById(Long id);

    /**
     * 根据商品类型代码查询配置详情
     *
     * @param productType 商品类型代码
     * @return 配置详情
     */
    ProductTypeCapability getByProductType(String productType);

    /**
     * 创建商品类型能力配置
     *
     * @param request 请求参数
     * @return 创建的配置
     */
    ProductTypeCapability create(ProductTypeCapabilityRequest request);

    /**
     * 更新商品类型能力配置
     *
     * @param id 配置ID
     * @param request 请求参数
     * @return 更新后的配置
     */
    ProductTypeCapability update(Long id, ProductTypeCapabilityRequest request);

    /**
     * 删除商品类型能力配置
     *
     * @param id 配置ID
     */
    void delete(Long id);

    /**
     * 启用/禁用商品类型能力配置
     *
     * @param id 配置ID
     * @param isActive 是否启用
     */
    void updateStatus(Long id, Boolean isActive);

    /**
     * 批量初始化商品类型能力配置
     * 为所有已定义的商品类型创建默认配置
     *
     * @return 初始化的配置数量
     */
    int initializeDefaultCapabilities();
}
