/**
 * GuideTips 引导提示配置
 *
 * 集中管理所有页面的引导提示配置，便于统一维护
 *
 * 使用方式：
 * 1. 在页面中导入配置：import { GUIDE_TIPS_CONFIG } from '@/config/guideTips';
 * 2. 使用配置：<GuideTips visible={true} steps={GUIDE_TIPS_CONFIG.questionAnswer} />
 * 3. 或使用默认值：<GuideTips visible={true} /> (不传 steps 使用组件默认值)
 */

import { TipsStep } from '@/components/common/GuideTips';

/**
 * GuideTips 配置接口
 */
export interface GuideTipsConfig {
    title: string;      // 提示标题
    steps: TipsStep[];  // 步骤列表
}

/**
 * 所有页面的 GuideTips 配置
 */
export const GUIDE_TIPS_CONFIG: Record<string, GuideTipsConfig> = {
    // ==================== 应用中心 ====================
    
    /**
     * 我创建的应用 - 创建引导
     */
    questionAnswer: {
        title: '如何创建并发布自己的 RAG（增强检索生成）应用？',
        steps: [
            {
                title: '创建或选用公共知识库',
                description: '选择公共知识库，或点击知识库菜单栏，创建自己的知识库。',
                stepNumber: 1,
            },
            {
                title: '参数配置',
                description: '点击右上角，创建应用，选择模型与知识范围，配置 Prompt、检索策略并调试。',
                stepNumber: 2,
            },
            {
                title: '发布应用',
                description: '发布后可在相应的项目内使用。',
                stepNumber: 3,
            },
        ],
    },

    // ==================== 知识库管理 ====================
    
    /**
     * 知识库列表 - 创建引导
     */
    knowledgeLib: {
        title: '如何创建并管理知识库？',
        steps: [
            {
                title: '创建知识库',
                description: '点击创建按钮，填写知识库基本信息和切片设置',
                stepNumber: 1,
            },
            {
                title: '上传文档',
                description: '在知识库详情中上传文档，系统会自动进行切片处理',
                stepNumber: 2,
            },
            {
                title: '应用引用',
                description: '创建应用时可以选择已创建的知识库',
                stepNumber: 3,
            },
        ],
    },

    /**
     * 知识库修订工具 - 使用引导
     */
    revisionTool: {
        title: '如何使用知识库修订工具？',
        steps: [
            {
                title: '选择知识库',
                description: '选中某个已解析完成的标准规范类知识库',
                stepNumber: 1,
            },
            {
                title: '选择切片，检索相似的切片',
                description: '切片工具中选择切片，系统将自动检索相似的切片',
                stepNumber: 2,
            },
            {
                title: '人工标记',
                description: '对目标切片进行快速标记',
                stepNumber: 3,
            },
        ],
    },

    // ==================== 评测工具 ====================
    
    /**
     * 评测任务管理 - 使用引导
     */
    evaluationTask: {
        title: '如何创建并管理评测任务？',
        steps: [
            {
                title: '创建评测任务',
                description: '上传本地数据集，选择需要评测的 RAG 或模型，进行自动评测；',
                stepNumber: 1,
            },
            {
                title: '配置打分模型',
                description: '选择自动打分的模型，设置不同的评估维度；',
                stepNumber: 2,
            },
            {
                title: '查看评测报告',
                description: '生成多维度的评测报告，查看详细评分、能力指标、评估日志。',
                stepNumber: 3,
            },
        ],
    },

    /**
     * 数据集管理 - 使用引导
     */
    datasetManagement: {
        title: '如何准备评测数据？',
        steps: [
            {
                title: '参考数据模板',
                description: '参考数据模版及数据格式要求，准备并上传您的评测数据',
                stepNumber: 1,
            },
            {
                title: '提供场景相关问题',
                description: '提供和您实际场景相关的问题以评估 RAG 或模型的效果和场景匹配性',
                stepNumber: 2,
            },
            {
                title: '查看示例数据',
                description: '点击"查看示例数据"按钮，查看标准的数据格式示例',
                stepNumber: 3,
            },
        ],
    },
};

/**
 * 根据 key 获取 GuideTips 配置
 * @param key 配置 key（如 'questionAnswer', 'knowledgeLib' 等）
 * @returns GuideTips 配置对象
 */
export const getGuideTipsConfig = (key: string): GuideTipsConfig | undefined => {
    return GUIDE_TIPS_CONFIG[key];
};

/**
 * 获取 GuideTips 的步骤列表
 * @param key 配置 key
 * @returns 步骤列表，如果 key 不存在则返回 undefined
 */
export const getGuideTipsSteps = (key: string): TipsStep[] | undefined => {
    return GUIDE_TIPS_CONFIG[key]?.steps;
};

/**
 * 获取 GuideTips 的标题
 * @param key 配置 key
 * @returns 标题，如果 key 不存在则返回 undefined
 */
export const getGuideTipsTitle = (key: string): string | undefined => {
    return GUIDE_TIPS_CONFIG[key]?.title;
};
