#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
迁移系统设置脚本
用于从旧的数据库管理方式迁移到新的迁移管理系统
"""

import os
import shutil
import subprocess
from datetime import datetime

def setup_migration_system():
    """设置迁移系统"""
    print("🚀 开始设置数据库迁移管理系统...")
    
    # 1. 创建迁移目录
    print("📁 创建迁移目录...")
    os.makedirs("migrations", exist_ok=True)
    print("✅ 迁移目录创建完成")
    
    # 2. 备份现有SQL文件
    print("📦 备份现有SQL文件...")
    sql_files = [
        "init.sql",
        "create_users.sql", 
        "create_clinic_users.sql",
        "fix_admin_user.sql",
        "fix_passwords.sql",
        "update_password_hashes.sql",
        "update_users_with_salt.sql",
        "complete_hashes.sql"
    ]
    
    backup_dir = f"sql_backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
    os.makedirs(backup_dir, exist_ok=True)
    
    for sql_file in sql_files:
        if os.path.exists(sql_file):
            shutil.copy2(sql_file, backup_dir)
            print(f"  ✅ 备份: {sql_file}")
    
    print(f"📦 SQL文件备份完成: {backup_dir}")
    
    # 3. 设置权限
    print("🔧 设置脚本权限...")
    scripts = ["migrate.py", "deploy_scripts/deploy_with_migration.sh"]
    for script in scripts:
        if os.path.exists(script):
            os.chmod(script, 0o755)
            print(f"  ✅ 设置权限: {script}")
    
    # 4. 验证Python依赖
    print("🐍 检查Python依赖...")
    try:
        import pymysql
        print("  ✅ pymysql 已安装")
    except ImportError:
        print("  ❌ pymysql 未安装，请运行: pip install pymysql")
    
    # 5. 测试数据库连接
    print("🗄️ 测试数据库连接...")
    try:
        from database_config import get_database_config
        from database_migration_manager import DatabaseMigrationManager
        
        db_config = get_database_config()
        manager = DatabaseMigrationManager(db_config)
        print("  ✅ 数据库连接测试成功")
        print("  ✅ 迁移历史表初始化完成")
    except Exception as e:
        print(f"  ❌ 数据库连接失败: {e}")
        print("  请检查数据库配置和连接")
    
    # 6. 创建示例迁移
    print("📝 创建示例迁移文件...")
    if not os.path.exists("migrations/20250101_000000_initial_schema.sql"):
        print("  ✅ 初始架构迁移文件已存在")
    else:
        print("  ✅ 示例迁移文件已创建")
    
    # 7. 更新部署脚本权限
    print("🚀 更新部署脚本...")
    deploy_scripts = [
        "deploy_scripts/deploy_with_backup.sh",
        "deploy_scripts/deploy_with_migration.sh"
    ]
    
    for script in deploy_scripts:
        if os.path.exists(script):
            os.chmod(script, 0o755)
            print(f"  ✅ 更新权限: {script}")
    
    print("\n🎉 迁移系统设置完成！")
    print("\n📋 下一步操作:")
    print("1. 检查并更新 database_config.py 中的数据库配置")
    print("2. 运行 'python migrate.py status' 检查系统状态")
    print("3. 如需要，创建新的迁移文件: 'python migrate.py create \"migration_name\"'")
    print("4. 在测试环境验证迁移: 'python migrate.py migrate --dry-run'")
    print("5. 更新 CI/CD 配置: 将 .gitlab-ci-new.yml 重命名为 .gitlab-ci.yml")
    print("\n📖 详细使用说明请参考: DATABASE_MIGRATION_GUIDE.md")

def cleanup_old_system():
    """清理旧系统文件（可选）"""
    print("\n🧹 清理旧系统文件...")
    
    # 询问是否清理
    response = input("是否要清理旧的SQL文件？(y/N): ").lower().strip()
    if response not in ['y', 'yes']:
        print("跳过清理步骤")
        return
    
    # 移动旧文件到归档目录
    archive_dir = f"legacy_sql_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
    os.makedirs(archive_dir, exist_ok=True)
    
    old_files = [
        "fix_admin_user.sql",
        "fix_passwords.sql", 
        "update_password_hashes.sql",
        "update_users_with_salt.sql",
        "complete_hashes.sql"
    ]
    
    for old_file in old_files:
        if os.path.exists(old_file):
            shutil.move(old_file, archive_dir)
            print(f"  ✅ 归档: {old_file}")
    
    print(f"📦 旧文件已归档到: {archive_dir}")

def show_migration_status():
    """显示迁移状态"""
    print("\n📊 当前迁移状态:")
    try:
        result = subprocess.run(
            ["python", "migrate.py", "status"],
            capture_output=True,
            text=True
        )
        print(result.stdout)
        if result.stderr:
            print("错误信息:", result.stderr)
    except Exception as e:
        print(f"无法获取迁移状态: {e}")

def main():
    """主函数"""
    print("=" * 60)
    print("🗄️ 数据库迁移管理系统设置向导")
    print("=" * 60)
    
    # 检查当前目录
    if not os.path.exists("app.py"):
        print("❌ 请在项目根目录运行此脚本")
        return 1
    
    # 设置迁移系统
    setup_migration_system()
    
    # 显示当前状态
    show_migration_status()
    
    # 询问是否清理旧系统
    cleanup_old_system()
    
    print("\n✅ 设置完成！迁移系统已就绪。")
    return 0

if __name__ == "__main__":
    exit(main())
