#!/usr/bin/env python3
"""
DeviantArt Downloader - 统一命令行接口
使用: da <command> [options]
"""

import sys
import subprocess
from pathlib import Path

# 添加项目根目录到路径（处理符号链接）
script_path = Path(__file__).resolve()  # 解析符号链接
project_root = script_path.parent.parent
sys.path.insert(0, str(project_root))

# 导入国际化
try:
    from tools.i18n import get_i18n, t
    i18n = get_i18n()
except Exception as e:
    # 如果导入失败，使用回退函数
    def t(key, **kwargs):
        # 简单的中英文映射
        fallback = {
            'cli_title': 'DeviantArt Downloader - 统一命令行工具',
            'usage': '用法',
            'cli_common_options': '通用选项',
            'cli_quick_examples': '快速示例',
            'cli_get_more_help': '获取更多帮助',
            'cli_batch_download': '批量下载',
            'cli_url_download': 'URL 下载',
            'cli_tools': '工具',
            'cli_info': '信息',
            'cmd_gallery': '下载画廊作品',
            'cmd_search': '搜索并下载',
            'cmd_fav': '下载收藏夹',
            'cmd_url': '下载单个作品',
            'cmd_artist': '下载作者所有作品',
            'cmd_login': '登录管理（多种方式）',
            'cmd_anti_ban': '查看防封IP指南',
            'cmd_test': '测试下载（下载1个文件）',
            'cmd_config': '查看/编辑配置',
            'cmd_help': '查看帮助',
            'cmd_version': '查看版本信息',
            'cmd_docs': '查看文档列表',
            'quality_original': '原图',
            'quality_full': '全图',
            'quality_preview': '预览',
        }
        return fallback.get(key, key)
    i18n = None

# 颜色定义
class C:
    BOLD = '\033[1m'
    GREEN = '\033[92m'
    BLUE = '\033[94m'
    YELLOW = '\033[93m'
    RED = '\033[91m'
    RESET = '\033[0m'

def print_main_help():
    """显示主帮助信息"""
    # 获取语言标记
    lang_flag = " (EN)" if i18n and i18n.current_lang == 'en_US' else ""
    
    print(f"""
{C.BOLD}╔══════════════════════════════════════════════════════════════════════╗
║  {t('cli_title')}{lang_flag:50}║
╚══════════════════════════════════════════════════════════════════════╝{C.RESET}

{C.BOLD}{t('usage')}:{C.RESET}
  devart-dl <command> [arguments] [options]

{C.BOLD}Command List / 命令列表:{C.RESET}

  {C.GREEN}📦 {t('cli_batch_download')}{C.RESET}
    gallery <username> [gallery_id]    {t('cmd_gallery')}
    search <username|all> <query>      {t('cmd_search')}
    fav <username> <folder_id>         {t('cmd_fav')}
    
  {C.BLUE}🎯 {t('cli_url_download')}{C.RESET}
    url <artwork_url>                  {t('cmd_url')}
    artist <profile_url|username>      {t('cmd_artist')}
    
  {C.YELLOW}🛠️  {t('cli_tools')}{C.RESET}
    login                              {t('cmd_login')}
    anti-ban                           {t('cmd_anti_ban')}
    test                               {t('cmd_test')}
    config                             {t('cmd_config')}
    
  {C.YELLOW}📚 {t('cli_info')}{C.RESET}
    help [command]                     {t('cmd_help')}
    version                            {t('cmd_version')}
    docs                               {t('cmd_docs')}

{C.BOLD}{t('cli_common_options')}:{C.RESET}
  --quality=<o|f|p>      {t('quality_original')}/{t('quality_full')}/{t('quality_preview')}
  --dest=<path>          Download directory / 下载目录
  --delay=<seconds>      Delay (anti-ban) / 延迟时间（防封）
  --cookies=<path>       Cookie file / Cookie文件
  --proxy=<url>          Proxy server / 代理服务器

{C.BOLD}Global Options / 全局选项:{C.RESET}
  --debug, -d            Debug mode with file logging / 调试模式（启用文件日志）
  --verbose, -v          Verbose output / 详细输出
  --quiet, -q            Quiet mode / 安静模式（仅错误）

{C.BOLD}{t('cli_quick_examples')}:{C.RESET}
  {C.BLUE}# Download single artwork / 下载单个作品{C.RESET}
  devart-dl url https://www.deviantart.com/user/art/title-123456
  
  {C.BLUE}# Download all from artist / 下载作者所有作品{C.RESET}
  devart-dl artist username
  
  {C.BLUE}# Batch download gallery / 批量下载画廊{C.RESET}
  devart-dl gallery username --quality=f --delay=2
  
  {C.BLUE}# Search and download / 搜索下载{C.RESET}
  devart-dl search username "landscape"
  
  {C.BLUE}# Anti-ban guide / 防封指南{C.RESET}
  devart-dl anti-ban

{C.BOLD}{t('cli_get_more_help')}:{C.RESET}
  devart-dl help <command>      Detailed help / 命令详细帮助
  devart-dl docs                Full docs / 完整文档
  
{C.BOLD}Language / 语言:{C.RESET} {i18n.get_language_name() if i18n else 'Auto'}
  export DEVART_LANG=zh_CN      # 中文
  export DEVART_LANG=en_US      # English
""")

def run_command(script: str, args: list) -> int:
    """运行指定的脚本"""
    # 使用全局的 project_root（已解析符号链接）
    script_path = project_root / script
    cmd = ['python3', str(script_path)] + args
    return subprocess.run(cmd).returncode

def main():
    """主入口"""
    # 解析全局选项
    import logging
    debug_mode = '--debug' in sys.argv or '-d' in sys.argv
    verbose = '--verbose' in sys.argv or '-v' in sys.argv
    quiet = '--quiet' in sys.argv or '-q' in sys.argv
    
    # 移除全局选项
    filtered_args = []
    for arg in sys.argv[1:]:
        if arg not in ['--debug', '-d', '--verbose', '-v', '--quiet', '-q']:
            filtered_args.append(arg)
    
    # 设置日志
    try:
        from tools.logger import setup_logger
        level = logging.DEBUG if (debug_mode or verbose) else (logging.WARNING if quiet else logging.INFO)
        logger = setup_logger(
            level=level,
            enable_file=debug_mode,  # 调试模式启用文件日志
            colored=True,
            debug=debug_mode
        )
        if debug_mode:
            logger.debug(f"调试模式已启用")
            logger.debug(f"命令行参数: {sys.argv}")
            logger.debug(f"项目根目录: {project_root}")
    except:
        # 日志系统失败不影响主功能
        pass
    
    if len(filtered_args) < 1:
        print_main_help()
        return 0
    
    command = filtered_args[0].lower()
    args = filtered_args[1:]
    
    # 命令路由
    if command in ['help', '-h', '--help']:
        if args:
            # 显示特定命令的帮助
            sub_command = args[0]
            if sub_command == 'gallery':
                return run_command('legacy/main.py', ['help'])
            elif sub_command == 'url':
                return run_command('tools/download_url.py', ['--help'])
            elif sub_command == 'artist':
                return run_command('tools/download_artist.py', ['--help'])
            elif sub_command == 'login':
                return run_command('tools/auth_manager.py', ['--help'])
            elif sub_command == 'anti-ban':
                return run_command('tools/anti_ban_config.py', [])
            else:
                print(f"{C.RED}未知命令: {sub_command}{C.RESET}")
                return 1
        else:
            print_main_help()
            return 0
    
    elif command == 'version':
        print(f"""
{C.BOLD}DeviantArt Downloader{C.RESET}

{C.GREEN}版本:{C.RESET} 3.0.0
{C.GREEN}Python 要求:{C.RESET} 3.6+ (异步功能需要 3.10+)

{C.GREEN}核心组件:{C.RESET}
  • deviantart_dl/     - 异步下载核心
  • da_downloader/     - 稳定版本
  • download_url.py    - URL 下载工具
  • download_artist.py - 作者批量下载
  • anti_ban_config.py - 防封策略配置
  • devart-dl          - 统一命令行入口

运行 'devart-dl docs' 查看完整文档
""")
        return 0
    
    elif command == 'docs':
        print(f"""
{C.BOLD}📚 文档列表{C.RESET}

{C.GREEN}主要文档:{C.RESET}
  README.md                - 主文档和快速开始
  FINAL_SUMMARY.md         - 完整项目总结
  VERSION_COMPARISON.md    - 三版本详细对比
  PROJECT_STRUCTURE.md     - 项目结构说明

{C.GREEN}专题指南:{C.RESET}
  防封IP指南: python anti_ban_config.py
  URL下载: python download_url.py --help
  作者下载: python download_artist.py --help

{C.GREEN}在线查看:{C.RESET}
  cat README.md            - 查看主文档
  cat FINAL_SUMMARY.md     - 查看项目总结
  
{C.GREEN}快速帮助:{C.RESET}
  da help                  - 命令帮助
  da help <command>        - 特定命令帮助
""")
        return 0
    
    elif command == 'login':
        if not args or args[0] in ['-h', '--help', 'help']:
            # 显示登录指南
            return run_command('tools/auth_manager.py', ['--help'])
        elif args[0] == 'clear':
            # 清除会话
            return run_command('tools/auth_manager.py', ['--clear-session'])
        elif args[0] == 'interactive':
            # 交互式登录
            return run_command('tools/auth_manager.py', ['--method=input'])
        elif args[0] == 'browser':
            # 浏览器登录
            return run_command('tools/browser_login.py', args[1:])
        elif args[0] in ['validate', 'verify', 'check', 'test']:
            # 验证 Cookie
            return run_command('tools/validate_cookies.py', args[1:])
        else:
            # 默认：自动登录并显示状态
            return run_command('tools/auth_manager.py', args)
    
    elif command == 'anti-ban':
        print(f"{C.BLUE}📖 正在显示防封IP完全指南...{C.RESET}\n")
        return run_command('tools/anti_ban_config.py', args)
    
    elif command == 'test':
        print(f"{C.BLUE}🧪 开始测试下载（仅下载1个文件）...{C.RESET}\n")
        if not args:
            print(f"{C.RED}错误: 请提供用户名{C.RESET}")
            print(f"用法: da test <username>")
            return 1
        username = args[0]
        test_args = ['gallery', username, '--limit=1', '--ask=1']
        return run_command('legacy/main.py', test_args)
    
    elif command == 'config':
        print(f"""
{C.BOLD}⚙️  配置管理{C.RESET}

{C.GREEN}配置文件位置:{C.RESET}
  config/cookies.txt.example    - Cookie 示例
  config/config.example.yaml    - 配置模板
  .gitignore                    - Git 忽略规则

{C.GREEN}快速配置:{C.RESET}
  # 查看 Cookie 示例
  cat config/cookies.txt.example
  
  # 查看配置模板
  cat config/config.example.yaml
  
  # 编辑 Cookie
  nano cookies.txt

{C.GREEN}常用配置:{C.RESET}
  质量设置: --quality=o|f|p
  延迟设置: --delay=1~5 (推荐≥2)
  下载目录: --dest=./path
  代理设置: --proxy=http://...

运行 'devart-dl anti-ban' 查看防封配置推荐
""")
        return 0
    
    elif command == 'url':
        if not args:
            return run_command('tools/download_url.py', ['--help'])
        return run_command('tools/download_url.py', args)
    
    elif command == 'artist':
        if not args:
            return run_command('tools/download_artist.py', ['--help'])
        return run_command('tools/download_artist.py', args)
    
    elif command in ['gallery', 'search', 'fav']:
        # 使用稳定版 main.py
        return run_command('legacy/main.py', [command] + args)
    
    else:
        print(f"{C.RED}✗ 未知命令: {command}{C.RESET}")
        print(f"\n运行 {C.GREEN}'da help'{C.RESET} 查看所有可用命令")
        return 1

if __name__ == '__main__':
    try:
        sys.exit(main())
    except KeyboardInterrupt:
        print(f"\n\n{C.YELLOW}✗ 用户中断{C.RESET}")
        sys.exit(130)
    except Exception as e:
        print(f"{C.RED}✗ 错误: {e}{C.RESET}")
        sys.exit(1)
