#!/usr/bin/env python3
"""
演示文件监控和增量索引功能

这个脚本演示了如何：
1. 初始化RAG系统并自动启动文件监控
2. 向知识库目录添加文件时自动触发增量索引
3. 查看监控和索引状态
"""
import os
import time
from pathlib import Path
from loguru import logger

# 设置简洁的日志格式
logger.remove()
logger.add(lambda msg: print(msg, end=""), format="{time:HH:mm:ss} | {level: <8} | {message}")

def demo_file_watcher_feature():
    """演示文件监控功能"""
    print("=" * 70)
    print("知识库文件监控和增量索引功能演示")
    print("=" * 70)
    
    try:
        # 导入必要的模块
        from src.config import get_config_manager
        from src.core.rag_system import RAGSystem
        from src.events import FileWatcherService, IncrementalIndexer
        
        print("\n步骤1: 获取配置")
        print("-" * 40)
        config = get_config_manager()
        
        # 确保文件监控已启用
        config.file_watcher.enabled = True
        config.file_watcher.debounce_seconds = 2.0
        
        knowledge_dir = config.paths.knowledge_dir
        print(f"知识库目录: {knowledge_dir}")
        print(f"文件监控启用: {config.file_watcher.enabled}")
        print(f"防抖时间: {config.file_watcher.debounce_seconds}秒")
        
        # 确保知识库目录存在
        knowledge_dir.mkdir(parents=True, exist_ok=True)
        
        print("\n步骤2: 初始化RAG系统（自动启动文件监控）")
        print("-" * 40)
        print("正在初始化RAG系统...")
        
        rag_system = RAGSystem(config=config)
        
        print("✅ RAG系统初始化完成")
        print("✅ 文件监控服务已自动启动")
        print("✅ 增量索引器已自动启动")
        
        # 等待服务启动
        time.sleep(2)
        
        print("\n步骤3: 查看服务状态")
        print("-" * 40)
        
        # 获取文件监控服务状态
        file_watcher = FileWatcherService.get_instance()
        watcher_status = file_watcher.get_status()
        
        print("文件监控服务状态:")
        print(f"  • 运行状态: {'✅ 运行中' if watcher_status['is_running'] else '❌ 已停止'}")
        print(f"  • 监控目录: {watcher_status['watch_dir']}")
        print(f"  • 支持的文件类型: {', '.join(watcher_status['supported_extensions'])}")
        
        # 获取增量索引器状态
        incremental_indexer = IncrementalIndexer.get_instance()
        indexer_status = incremental_indexer.get_status()
        
        print("\n增量索引器状态:")
        print(f"  • 运行状态: {'✅ 运行中' if indexer_status['is_running'] else '❌ 已停止'}")
        print(f"  • 队列大小: {indexer_status['queue_size']}")
        print(f"  • 批量大小: {indexer_status['batch_size']}")
        print(f"  • 批量超时: {indexer_status['batch_timeout']}秒")
        
        print("\n步骤4: 演示文件监控功能")
        print("-" * 40)
        print("现在您可以向知识库目录添加文件，系统会自动检测并索引:")
        print(f"知识库目录: {knowledge_dir}")
        print("\n支持的文件类型:")
        print("  • .txt - 文本文件")
        print("  • .md - Markdown文件")
        print("  • .pdf - PDF文档")
        print("  • .docx - Word文档")
        
        print("\n操作指南:")
        print("1. 将文件复制到上述知识库目录")
        print("2. 系统会自动检测文件变化")
        print("3. 文件会被自动添加到增量索引队列")
        print("4. 系统会批量处理并更新索引")
        
        print("\n步骤5: 手动触发增量索引（可选）")
        print("-" * 40)
        
        # 检查知识库目录中是否有现有文件
        existing_files = []
        for ext in [".txt", ".md", ".pdf", ".docx"]:
            for file_path in knowledge_dir.rglob(f"*{ext}"):
                if file_path.is_file():
                    existing_files.append(str(file_path))
        
        if existing_files:
            print(f"发现 {len(existing_files)} 个现有文件:")
            for i, file_path in enumerate(existing_files[:5], 1):
                print(f"  {i}. {Path(file_path).name}")
            if len(existing_files) > 5:
                print(f"  ... 还有 {len(existing_files) - 5} 个文件")
            
            print("\n是否要手动触发这些文件的增量索引? (y/n)")
            user_input = input().strip().lower()
            
            if user_input == 'y':
                print("正在手动触发增量索引...")
                result = incremental_indexer.trigger_manual_indexing(existing_files)
                
                if result.get("success"):
                    print(f"✅ 成功处理 {result.get('processed_count', 0)} 个文件")
                else:
                    print(f"❌ 处理失败: {result.get('error', '未知错误')}")
        else:
            print("知识库目录中没有发现支持的文件。")
        
        print("\n步骤6: 保持服务运行")
        print("-" * 40)
        print("文件监控服务将在后台持续运行。")
        print("当您向知识库目录添加新文件或修改现有文件时，")
        print("系统会自动检测并更新索引。")
        
        print("\n" + "=" * 70)
        print("演示完成!")
        print("=" * 70)
        print("\n提示: 要停止服务，可以调用:")
        print("  • file_watcher.stop() - 停止文件监控")
        print("  • incremental_indexer.stop() - 停止增量索引")
        
        return True
        
    except Exception as e:
        print(f"❌ 演示过程中发生错误: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    demo_file_watcher_feature()