/**
 * harmonyos_setup — 下载文档到本地知识库
 *
 * 首次使用时调用,从华为开发者官网爬取全部文档。
 * 支持断点续爬,预计耗时 60-90 分钟。
 */
import { z } from 'zod';
import { crawlAll } from '../scraper/crawler.js';
import { isKnowledgeReady, getReferencesRoot, getTotalDocCount } from '../lib/knowledge.js';
// ============================================================
// harmonyos_setup
// ============================================================
const SetupInputSchema = z.object({
    action: z.enum(['status', 'download', 'resume'])
        .default('status')
        .describe('操作类型: status=查看状态, download=开始下载, resume=继续下载'),
}).strict();
export function registerSetupTool(server) {
    server.registerTool('harmonyos_setup', {
        title: 'Setup Knowledge Base',
        description: `管理本地 HarmonyOS 知识库的下载和状态。

首次使用时,需要从华为开发者官网下载全部文档到本地(~/.harmonyos-docs/)。

**操作:**
- status: 查看当前知识库状态(是否就绪、文档数量)
- download: 开始全量下载(约 10,843 篇文档,耗时 60-90 分钟,支持断点续爬)
- resume: 继续上次中断的下载

**注意:** download 是异步操作——调用后立即返回,下载在后台进行。使用 status 查看进度。`,
        inputSchema: SetupInputSchema,
        annotations: {
            readOnlyHint: false,
            destructiveHint: false,
            idempotentHint: true,
            openWorldHint: true,
        },
    }, async (params) => {
        const rootPath = getReferencesRoot();
        if (params.action === 'status') {
            if (isKnowledgeReady()) {
                const count = getTotalDocCount();
                return {
                    content: [{
                            type: 'text',
                            text: `✅ 知识库已就绪\n\n路径: ${rootPath}\n文档数: ${count.toLocaleString()}\n\n可直接使用 harmonyos_search_docs 等工具查询。`,
                        }],
                };
            }
            return {
                content: [{
                        type: 'text',
                        text: `⚠️ 知识库未就绪\n\n预期路径: ${rootPath}\n\n请调用 harmonyos_setup 并设置 action="download" 开始下载文档。\n预计下载 10,843 篇文档,耗时约 60-90 分钟。`,
                    }],
            };
        }
        if (params.action === 'download' || params.action === 'resume') {
            if (isKnowledgeReady()) {
                const count = getTotalDocCount();
                return {
                    content: [{
                            type: 'text',
                            text: `✅ 知识库已存在(${count.toLocaleString()} 篇文档)\n\n如需重新下载,请先删除 ${rootPath} 目录。`,
                        }],
                };
            }
            // 启动后台下载
            const lastProgress = { catalog: '', done: 0, total: 0, phase: 'tree', errors: 0 };
            // 异步执行爬取
            crawlAll(rootPath, (p) => {
                Object.assign(lastProgress, p);
            }).then(summary => {
                console.error(`\n[harmonyos_setup] 下载完成: ${summary.totalDocs} 篇文档`);
            }).catch(err => {
                console.error(`\n[harmonyos_setup] 下载出错: ${err}`);
            });
            // 立即返回,告知用户下载已开始
            return {
                content: [{
                        type: 'text',
                        text: `🚀 开始下载 HarmonyOS 文档到本地...

目标路径: ${rootPath}
预计耗时: 60-90 分钟
预计文档: ~10,843 篇

下载在后台进行,你可以:
- 稍后调用 harmonyos_setup action="status" 查看进度
- 下载完成后即可使用所有检索工具

当前状态: 正在获取文档树...`,
                    }],
            };
        }
        return {
            content: [{ type: 'text', text: `未知操作: ${params.action}` }],
        };
    });
}
// ============================================================
// 知识库守卫 — 在工具调用前检查知识库是否就绪
// ============================================================
/**
 * 检查知识库是否就绪,如果未就绪返回引导消息
 * 用于在其他工具的 handler 开头调用
 */
export function guardKnowledge() {
    if (isKnowledgeReady())
        return null;
    const rootPath = getReferencesRoot();
    return `⚠️ 知识库尚未下载。\n\n请先调用 harmonyos_setup:\n- action="status" 查看状态\n- action="download" 开始下载 ${rootPath}\n\n预计 60-90 分钟完成下载。`;
}
//# sourceMappingURL=setup.js.map