"""
命令行入口程序
提供命令行接口来使用doc_classifier库
"""

import sys
import time
import argparse
from pathlib import Path

try:
    from .core import DocumentClassifier
except ImportError:
    from core import DocumentClassifier


def main():
    """主函数"""
    parser = argparse.ArgumentParser(
        description='文档分类切分工具 - 支持PDF和Word文档',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  python main.py document.pdf
  python main.py document.docx -l 2 -o ./output
  python main.py document.pdf --max-size 1500 --min-size 800
        """
    )
    
    parser.add_argument(
        'file_path',
        help='文档路径（PDF或Word）'
    )
    
    parser.add_argument(
        '-l', '--level',
        type=int,
        default=2,
        help='要分类的目标层级（默认: 2）'
    )
    
    parser.add_argument(
        '-o', '--output',
        help='输出目录（默认: 源文件同目录下的"分类切分结果"）'
    )
    
    parser.add_argument(
        '--max-size',
        type=int,
        default=1000,
        help='最大分块字符数（默认: 1000）'
    )
    
    parser.add_argument(
        '--min-size',
        type=int,
        default=500,
        help='最小分块字符数（默认: 500）'
    )
    
    parser.add_argument(
        '--no-save',
        action='store_true',
        help='不保存结果到文件（仅返回数据）'
    )
    
    args = parser.parse_args()
    
    # 检查文件是否存在
    file_path = Path(args.file_path)
    if not file_path.exists():
        print(f"错误: 文件不存在: {args.file_path}")
        sys.exit(1)
    
    # 检查文件格式
    if file_path.suffix.lower() not in ['.pdf', '.docx', '.doc']:
        print(f"错误: 不支持的文件格式: {file_path.suffix}")
        print("支持的格式: .pdf, .docx, .doc")
        sys.exit(1)
    
    try:
        # 创建分类器
        classifier = DocumentClassifier()
        
        # 记录开始时间
        start_time = time.time()
        print(f"\n开始处理时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time))}")
        
        # 处理文档
        result = classifier.process_document(
            file_path=str(file_path),
            target_level=args.level,
            output_dir=args.output,
            max_chunk_size=args.max_size,
            min_chunk_size=args.min_size,
            save_results=not args.no_save
        )
        
        # 计算总耗时
        end_time = time.time()
        total_time = end_time - start_time
        
        # 格式化时间显示
        hours = int(total_time // 3600)
        minutes = int((total_time % 3600) // 60)
        seconds = total_time % 60
        
        print("\n" + "=" * 100)
        print("处理成功！")
        print("=" * 100)
        print(f"\n文本块总数: {len(result['chunks'])}")
        if not args.no_save:
            print(f"输出目录: {result['output_dir']}")
        
        # 显示总耗时
        print("\n" + "-" * 100)
        if hours > 0:
            print(f"总处理时间: {hours}小时 {minutes}分钟 {seconds:.2f}秒")
        elif minutes > 0:
            print(f"总处理时间: {minutes}分钟 {seconds:.2f}秒")
        else:
            print(f"总处理时间: {seconds:.2f}秒")
        print(f"结束处理时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time))}")
        print("-" * 100)
        
    except Exception as e:
        print(f"\n错误: {str(e)}")
        import traceback
        traceback.print_exc()
        sys.exit(1)


if __name__ == "__main__":
    main()

