package com.erp.skumatch.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.erp.skumatch.dto.*;
import com.erp.skumatch.entity.*;

import java.util.List;

public interface SkuMatchService {
    
    // ==================== 匹配记录 ====================
    
    /** 获取匹配列表 */
    IPage<SkuMatchRecord> getMatchList(MatchListRequest request);
    
    /** 获取未匹配商品 */
    IPage<PlatformSku> getUnmatchedList(UnmatchedRequest request);
    
    /** 获取ERP商品列表(手动匹配选择) */
    IPage<ErpSku> getErpSkuList(String keyword, Integer page, Integer limit);
    
    // ==================== 手动匹配 ====================
    
    /** 手动匹配 - 关联平台SKU与ERP SKU */
    void manualMatch(ManualMatchRequest request);
    
    /** 取消匹配 */
    void unmatch(Long platformSkuId);
    
    /** 批量匹配 */
    void batchMatch(BatchMatchRequest request);
    
    // ==================== 规则匹配 ====================
    
    /** 获取匹配规则列表 */
    List<SkuMatchRule> getMatchRules(String platform);
    
    /** 创建匹配规则 */
    SkuMatchRule createRule(RuleRequest request);
    
    /** 更新匹配规则 */
    void updateRule(Long id, RuleRequest request);
    
    /** 删除匹配规则 */
    void deleteRule(Long id);
    
    /** 切换规则启用状态 */
    SkuMatchRule toggleRuleEnabled(Long id, Boolean enabled);
    
    /** 执行规则匹配 */
    ExecuteResult executeRuleMatch(String platform);
    
    // ==================== AI匹配 ====================
    
    /** 获取AI匹配配置 */
    AiMatchConfig getAiMatchConfig();
    
    /** 保存AI匹配配置 */
    AiMatchConfig saveAiMatchConfig(AiMatchConfig config);
    
    /** 执行AI匹配 */
    ExecuteResult executeAiMatch(ExecuteAiRequest request);
    
    // ==================== 平台商品 ====================
    
    /** 获取平台-店铺树 */
    List<PlatformShopTreeNode> getPlatformShopTree();
    
    /** 按平台获取店铺列表 */
    List<Shop> getShopsByPlatform(String platform);
    
    /** 下载平台商品 */
    String downloadPlatformGoods(DownloadGoodsRequest request);
    
    /** 获取已下载的平台商品列表 */
    List<PlatformGoodsDTO> getPlatformGoodsList(Long shopId);
    
    /** 绑定ERP商品与平台SKU */
    void bindErpSku(BindErpSkuRequest request);
    
    // ==================== 导出 ====================
    
    /** 导出匹配关系 */
    byte[] exportMatchRecords(String platform);
    
    // 结果封装
    record ExecuteResult(int matched, int total) {}
}
