#!/usr/bin/env python3
"""
创建系统测试账户脚本
"""
import asyncio
import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 加载本地配置
try:
    import local_config
    print("✅ 本地配置已加载")
except ImportError:
    print("⚠️  未找到local_config.py")

# 要创建的系统账户
SYSTEM_USERS = [
    {
        "username": "superadmin",
        "password": "Superadmin123!",
        "email": "superadmin@kaopeilian.com",
        "full_name": "超级管理员",
        "role": "admin",  # 使用现有的admin角色
        "is_superuser": 1,
    },
    {
        "username": "admin",
        "password": "Admin123!",
        "email": "admin@kaopeilian.com",
        "full_name": "系统管理员",
        "role": "admin",
        "is_superuser": 0,
    },
    {
        "username": "testuser",
        "password": "TestPass123!",
        "email": "testuser@kaopeilian.com",
        "full_name": "测试学员",
        "role": "trainee",  # 学员角色
        "is_superuser": 0,
    },
]

async def create_system_accounts():
    """创建系统测试账户"""
    try:
        from app.core.database import AsyncSessionLocal
        from app.core.security import get_password_hash
        from sqlalchemy import text
        
        print("🔧 开始创建系统测试账户...\n")
        
        async with AsyncSessionLocal() as session:
            created_count = 0
            updated_count = 0
            
            for user_data in SYSTEM_USERS:
                username = user_data["username"]
                password = user_data["password"]
                hashed_password = get_password_hash(password)
                
                # 检查用户是否存在
                result = await session.execute(
                    text("SELECT id FROM users WHERE username = :username"),
                    {"username": username}
                )
                existing = result.fetchone()
                
                if existing:
                    # 更新现有用户
                    await session.execute(
                        text("""
                            UPDATE users 
                            SET password_hash = :password_hash,
                                email = :email,
                                full_name = :full_name,
                                role = :role,
                                is_superuser = :is_superuser,
                                is_active = 1,
                                updated_at = NOW()
                            WHERE username = :username
                        """),
                        {
                            "username": username,
                            "password_hash": hashed_password,
                            "email": user_data["email"],
                            "full_name": user_data["full_name"],
                            "role": user_data["role"],
                            "is_superuser": user_data["is_superuser"]
                        }
                    )
                    await session.commit()
                    updated_count += 1
                    print(f"✓ 更新用户: {username} ({user_data['full_name']})")
                else:
                    # 创建新用户
                    await session.execute(
                        text("""
                            INSERT INTO users (
                                username, email, password_hash, role, 
                                is_active, full_name, is_superuser, 
                                created_at, updated_at
                            )
                            VALUES (
                                :username, :email, :password_hash, :role,
                                1, :full_name, :is_superuser,
                                NOW(), NOW()
                            )
                        """),
                        {
                            "username": username,
                            "email": user_data["email"],
                            "password_hash": hashed_password,
                            "role": user_data["role"],
                            "full_name": user_data["full_name"],
                            "is_superuser": user_data["is_superuser"]
                        }
                    )
                    await session.commit()
                    created_count += 1
                    print(f"✓ 创建用户: {username} ({user_data['full_name']})")
        
        # 打印总结
        print("\n" + "="*50)
        print("✅ 系统用户创建/更新完成！")
        print(f"新创建用户数: {created_count}")
        print(f"更新用户数: {updated_count}")
        print("\n系统账户信息：")
        print("-"*50)
        print("| 角色       | 用户名     | 密码           | 权限说明                     |")
        print("| ---------- | ---------- | -------------- | ---------------------------- |")
        print("| 超级管理员 | superadmin | Superadmin123! | 系统最高权限，可管理所有功能 |")
        print("| 系统管理员 | admin      | Admin123!      | 可管理除“系统管理”模块外的全部功能（管理员仪表盘、用户管理、岗位管理、系统日志） |")
        print("| 测试学员   | testuser   | TestPass123!   | 可学习课程、参加考试和训练   |")
        print("-"*50)
        
    except Exception as e:
        print(f"❌ 创建用户失败: {e}")
        import traceback
        traceback.print_exc()

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