"""
执行陪练场景表创建和初始数据插入脚本
"""
import asyncio
import sys
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

from sqlalchemy import text
from app.core.database import async_engine


async def run_sql_file():
    """执行SQL文件"""
    sql_file = project_root / "scripts" / "create_practice_scenes.sql"
    
    if not sql_file.exists():
        print(f"❌ SQL文件不存在: {sql_file}")
        return False
    
    # 读取SQL文件
    with open(sql_file, 'r', encoding='utf-8') as f:
        sql_content = f.read()
    
    # 分割SQL语句（按分号分隔）
    statements = [s.strip() for s in sql_content.split(';') if s.strip() and not s.strip().startswith('--')]
    
    print(f"📝 准备执行 {len(statements)} 条SQL语句...")
    
    async with async_engine.begin() as conn:
        for i, statement in enumerate(statements, 1):
            if not statement:
                continue
            try:
                # 跳过注释
                if statement.strip().startswith('--'):
                    continue
                
                print(f"  [{i}/{len(statements)}] 执行中...")
                result = await conn.execute(text(statement))
                
                # 如果是SELECT语句，打印结果
                if statement.strip().upper().startswith('SELECT'):
                    rows = result.fetchall()
                    print(f"    ✅ 查询返回 {len(rows)} 行数据")
                    for row in rows:
                        print(f"       {row}")
                else:
                    print(f"    ✅ 执行成功")
                
            except Exception as e:
                print(f"    ❌ 执行失败: {e}")
                if "already exists" not in str(e).lower() and "duplicate" not in str(e).lower():
                    raise
    
    print("\n✅ 所有SQL语句执行完成！")
    return True


async def main():
    """主函数"""
    try:
        print("=" * 60)
        print("陪练场景表创建和初始数据插入")
        print("=" * 60)
        
        success = await run_sql_file()
        
        if success:
            print("\n" + "=" * 60)
            print("✅ 陪练场景表创建成功！")
            print("=" * 60)
        else:
            print("\n" + "=" * 60)
            print("❌ 执行失败")
            print("=" * 60)
            sys.exit(1)
            
    except Exception as e:
        print(f"\n❌ 发生错误: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)


if __name__ == "__main__":
    asyncio.run(main())



