#!/bin/bash
# 慢剧工作台系统初始化脚本
# 版本: 2.0.0

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log() {
    local level="$1"
    local message="$2"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    case "$level" in
        "INFO") color=$GREEN ;;
        "WARN") color=$YELLOW ;;
        "ERROR") color=$RED ;;
        "DEBUG") color=$BLUE ;;
        *) color=$NC ;;
    esac
    
    echo -e "${color}[$timestamp] [$level] $message${NC}"
}

# 打印标题
print_header() {
    echo -e "\n${BLUE}════════════════════════════════════════════════════════════════${NC}"
    echo -e "${BLUE}               慢剧生成工作台系统初始化                  ${NC}"
    echo -e "${BLUE}                    版本: 2.0.0                          ${NC}"
    echo -e "${BLUE}════════════════════════════════════════════════════════════════${NC}\n"
}

# 检查系统依赖
check_dependencies() {
    log "INFO" "检查系统依赖..."
    
    local missing_deps=()
    
    # 检查Python
    if ! command -v python3 &> /dev/null; then
        missing_deps+=("python3")
    fi
    
    # 检查SQLite
    if ! command -v sqlite3 &> /dev/null; then
        missing_deps+=("sqlite3")
    fi
    
    # 检查jq (JSON处理)
    if ! command -v jq &> /dev/null; then
        log "WARN" "jq未安装，JSON处理功能受限"
    fi
    
    if [ ${#missing_deps[@]} -gt 0 ]; then
        log "ERROR" "缺少依赖: ${missing_deps[*]}"
        log "INFO" "请安装: apt-get install ${missing_deps[*]}"
        return 1
    fi
    
    log "INFO" "系统依赖检查通过"
    return 0
}

# 检查Agent状态
check_agents() {
    log "INFO" "检查Agent状态..."
    
    local agents=(
        "cto:1738491"
        "collector:1738514"
        "writer:1738507"
        "producer:1738498"
        "publisher:1738521"
        "analyzer:1738528"
    )
    
    local running_count=0
    local total_count=0
    
    for agent_info in "${agents[@]}"; do
        local agent_name=${agent_info%:*}
        local expected_pid=${agent_info#*:}
        
        ((total_count++))
        
        if ps -p $expected_pid > /dev/null 2>&1; then
            log "INFO" "✅ $agent_name: 运行中 (PID: $expected_pid)"
            ((running_count++))
        else
            log "WARN" "⚠️  $agent_name: 未运行 (预期PID: $expected_pid)"
        fi
    done
    
    if [ $running_count -eq $total_count ]; then
        log "INFO" "✅ 所有Agent都在运行 ($running_count/$total_count)"
        return 0
    else
        log "WARN" "⚠️  部分Agent未运行 ($running_count/$total_count)"
        return 1
    fi
}

# 创建目录结构
create_directory_structure() {
    log "INFO" "创建目录结构..."
    
    local base_dirs=(
        "/root/data/disk"
        "/root/data/disk/system"
        "/root/data/disk/system/config"
        "/root/data/disk/system/database"
        "/root/data/disk/system/scripts"
        "/root/data/disk/system/logs"
        "/root/data/disk/system/logs/cto"
        "/root/data/disk/system/logs/collector"
        "/root/data/disk/system/logs/writer"
        "/root/data/disk/system/logs/producer"
        "/root/data/disk/system/logs/publisher"
        "/root/data/disk/system/logs/analyzer"
        "/root/data/disk/projects"
        "/root/data/disk/temp"
        "/root/data/disk/temp/processing"
        "/root/data/disk/temp/cache"
    )
    
    for dir in "${base_dirs[@]}"; do
        if [ ! -d "$dir" ]; then
            mkdir -p "$dir"
            log "DEBUG" "创建目录: $dir"
        fi
    done
    
    # 创建项目模板目录
    create_project_template
    
    log "INFO" "目录结构创建完成"
}

# 创建项目模板
create_project_template() {
    log "INFO" "创建项目模板..."
    
    local template_dir="/root/data/disk/projects/template"
    
    if [ -d "$template_dir" ]; then
        log "DEBUG" "项目模板已存在，跳过创建"
        return 0
    fi
    
    # 创建模板目录结构
    local template_dirs=(
        "$template_dir/00_metadata"
        "$template_dir/01_collection/hot_topics"
        "$template_dir/01_collection/user_profiles"
        "$template_dir/01_collection/material_library"
        "$template_dir/01_collection/search_results"
        "$template_dir/02_creation/concepts"
        "$template_dir/02_creation/scripts"
        "$template_dir/02_creation/characters"
        "$template_dir/02_creation/scenes"
        "$template_dir/02_creation/prompts"
        "$template_dir/03_production/character_images"
        "$template_dir/03_production/scene_images"
        "$template_dir/03_production/video_clips"
        "$template_dir/03_production/audio_files"
        "$template_dir/03_production/final_videos"
        "$template_dir/04_review/quality_checks"
        "$template_dir/04_review/platform_checks"
        "$template_dir/04_review/optimizations"
        "$template_dir/04_review/publish_prep"
        "$template_dir/05_analysis/feedback"
        "$template_dir/05_analysis/performance"
        "$template_dir/05_analysis/insights"
        "$template_dir/05_analysis/recommendations"
    )
    
    for dir in "${template_dirs[@]}"; do
        mkdir -p "$dir"
    done
    
    log "INFO" "项目模板目录创建完成"
}

# 初始化配置文件
init_config_files() {
    log "INFO" "初始化配置文件..."
    
    local config_dir="/root/data/disk/system/config"
    
    # 检查配置文件是否存在
    if [ -f "$config_dir/manhua_studio_config.json" ]; then
        log "DEBUG" "配置文件已存在，备份后更新"
        cp "$config_dir/manhua_studio_config.json" "$config_dir/manhua_studio_config.json.backup"
    fi
    
    # 创建默认配置文件
    cat > "$config_dir/manhua_studio_config.json" << 'EOF'
{
  "version": "2.0.0",
  "system_name": "慢剧生成工作台",
  "created_at": "2026-04-28T18:49:00Z",
  
  "storage_config": {
    "root_path": "/root/data/disk",
    "projects_path": "/root/data/disk/projects",
    "system_path": "/root/data/disk/system",
    "temp_path": "/root/data/disk/temp",
    "max_project_size_mb": 1024,
    "max_temp_files": 1000,
    "cleanup_schedule": "0 3 * * *"
  }
}
EOF
    
    log "INFO" "配置文件初始化完成"
}

# 初始化数据库
init_databases() {
    log "INFO" "初始化数据库..."
    
    # 检查Python脚本
    local init_script="/root/data/disk/system/scripts/init_database.py"
    
    if [ ! -f "$init_script" ]; then
        log "ERROR" "数据库初始化脚本不存在: $init_script"
        return 1
    fi
    
    # 执行数据库初始化
    if python3 "$init_script"; then
        log "INFO" "数据库初始化成功"
        return 0
    else
        log "ERROR" "数据库初始化失败"
        return 1
    fi
}

# 初始化CLI工具
init_cli_tools() {
    log "INFO" "初始化CLI工具..."
    
    local cli_script="/root/data/disk/system/scripts/manhua_studio_cli.py"
    
    if [ ! -f "$cli_script" ]; then
        log "ERROR" "CLI工具脚本不存在: $cli_script"
        return 1
    fi
    
    # 设置执行权限
    chmod +x "$cli_script"
    
    # 创建符号链接
    local symlink_path="/usr/local/bin/manhua"
    
    if [ ! -L "$symlink_path" ]; then
        ln -sf "$cli_script" "$symlink_path"
        log "INFO" "创建CLI符号链接: $symlink_path"
    fi
    
    # 测试CLI工具
    if "$cli_script" system info > /dev/null 2>&1; then
        log "INFO" "CLI工具测试通过"
        return 0
    else
        log "ERROR" "CLI工具测试失败"
        return 1
    fi
}

# 验证系统状态
verify_system_state() {
    log "INFO" "验证系统状态..."
    
    local verification_passed=true
    
    # 1. 验证目录结构
    local required_dirs=(
        "/root/data/disk"
        "/root/data/disk/system/config"
        "/root/data/disk/system/database"
        "/root/data/disk/projects/template"
        "/root/data/disk/temp"
    )
    
    for dir in "${required_dirs[@]}"; do
        if [ ! -d "$dir" ]; then
            log "ERROR" "目录不存在: $dir"
            verification_passed=false
        fi
    done
    
    # 2. 验证配置文件
    local config_file="/root/data/disk/system/config/manhua_studio_config.json"
    if [ ! -f "$config_file" ]; then
        log "ERROR" "配置文件不存在: $config_file"
        verification_passed=false
    fi
    
    # 3. 验证数据库文件
    local database_files=(
        "/root/data/disk/system/database/projects.db"
        "/root/data/disk/system/database/agents.db"
        "/root/data/disk/system/database/analytics.db"
    )
    
    for db_file in "${database_files[@]}"; do
        if [ ! -f "$db_file" ]; then
            log "ERROR" "数据库文件不存在: $db_file"
            verification_passed=false
        fi
    done
    
    # 4. 验证CLI工具
    if ! command -v manhua &> /dev/null && [ ! -f "/root/data/disk/system/scripts/manhua_studio_cli.py" ]; then
        log "ERROR" "CLI工具不可用"
        verification_passed=false
    fi
    
    if [ "$verification_passed" = true ]; then
        log "INFO" "✅ 系统状态验证通过"
        return 0
    else
        log "ERROR" "❌ 系统状态验证失败"
        return 1
    fi
}

# 显示完成信息
show_completion_info() {
    echo -e "\n${GREEN}════════════════════════════════════════════════════════════════${NC}"
    echo -e "${GREEN}                慢剧工作台初始化完成!                  ${NC}"
    echo -e "${GREEN}════════════════════════════════════════════════════════════════${NC}"
    
    echo -e "\n${YELLOW}📋 系统信息:${NC}"
    echo "   系统版本: 2.0.0"
    echo "   数据目录: /root/data/disk"
    echo "   配置文件: /root/data/disk/system/config/manhua_studio_config.json"
    
    echo -e "\n${YELLOW}🤖 Agent状态:${NC}"
    /root/data/disk/system/scripts/manhua_studio_cli.py agents list 2>/dev/null | grep -E "(✅|⚠️|🔴)" || echo "   使用 'manhua agents list' 查看详情"
    
    echo -e "\n${YELLOW}🗄️  数据库:${NC}"
    echo "   projects.db: 项目管理和工作流数据"
    echo "   agents.db: Agent状态和任务数据"
    echo "   analytics.db: 创作内容和分析数据"
    
    echo -e "\n${YELLOW}🔧 可用命令:${NC}"
    echo "   manhua projects list          # 列出项目"
    echo "   manhua projects create <名称> # 创建项目"
    echo "   manhua status <项目ID>        # 查看项目状态"
    echo "   manhua agents list            # 查看Agent状态"
    echo "   manhua system info            # 查看系统信息"
    echo "   manhua cleanup                # 清理临时文件"
    
    echo -e "\n${YELLOW}🚀 快速开始:${NC}"
    echo "   1. 创建项目: manhua projects create '我的第一个慢剧'"
    echo "   2. 查看状态: manhua status <项目ID>"
    echo "   3. 监控进度: 项目会自动启动工作流"
    
    echo -e "\n${GREEN}════════════════════════════════════════════════════════════════${NC}\n"
}

# 主函数
main() {
    print_header
    
    log "INFO" "开始慢剧工作台系统初始化"
    
    # 检查依赖
    if ! check_dependencies; then
        log "ERROR" "依赖检查失败，初始化中止"
        return 1
    fi
    
    # 检查Agent状态
    check_agents
    
    # 创建目录结构
    if ! create_directory_structure; then
        log "ERROR" "目录创建失败"
        return 1
    fi
    
    # 初始化配置文件
    if ! init_config_files; then
        log "ERROR" "配置初始化失败"
        return 1
    fi
    
    # 初始化数据库
    if ! init_databases; then
        log "ERROR" "数据库初始化失败"
        return 1
    fi
    
    # 初始化CLI工具
    if ! init_cli_tools; then
        log "ERROR" "CLI工具初始化失败"
        return 1
    fi
    
    # 验证系统状态
    if ! verify_system_state; then
        log "ERROR" "系统验证失败"
        return 1
    fi
    
    # 显示完成信息
    show_completion_info
    
    log "INFO" "慢剧工作台系统初始化完成"
    return 0
}

# 执行主函数
if main; then
    exit 0
else
    exit 1
fi