#!/usr/bin/env python3
"""
检查并重置管理员账号
"""

from sqlalchemy.orm import Session
from app.models.database import engine, Base, SessionLocal
from app.models.models import User, Role
from app.services.user import UserService


def check_admin():
    """检查并重置管理员账号"""
    db = SessionLocal()
    
    try:
        # 检查是否存在管理员账号
        print("检查管理员账号...")
        admin_user = db.query(User).filter(User.username == "admin").first()
        
        if not admin_user:
            print("⚠️  管理员账号不存在，创建新的管理员账号...")
            
            # 初始化默认角色
            UserService.init_default_roles(db)
            
            # 获取默认管理员角色
            admin_role = UserService.get_role_by_name(db, "admin")
            if not admin_role:
                print("❌ 管理员角色不存在，创建失败")
                return
            
            # 创建默认管理员账号
            admin_user = User(
                id="user-admin",
                username="admin",
                email="admin@example.com",
                password_hash=UserService.get_password_hash("admin123"),
                role_id=admin_role.id,
                status="active"
            )
            db.add(admin_user)
            db.commit()
            db.refresh(admin_user)
            print("✅ 管理员账号创建成功")
        else:
            print("✅ 管理员账号存在，重置密码...")
            # 重置管理员密码
            admin_user.password_hash = UserService.get_password_hash("admin123")
            db.commit()
            print("✅ 管理员密码重置成功")
        
        # 显示管理员账号信息
        print("\n管理员账号信息:")
        print(f"用户名: {admin_user.username}")
        print(f"密码: admin123")
        print(f"邮箱: {admin_user.email}")
        print(f"状态: {admin_user.status}")
        
        # 检查角色信息
        if admin_user.role:
            print(f"角色: {admin_user.role.name}")
        else:
            print("⚠️  管理员角色信息缺失")
            # 尝试修复角色关联
            admin_role = UserService.get_role_by_name(db, "admin")
            if admin_role:
                admin_user.role_id = admin_role.id
                db.commit()
                print("✅ 管理员角色关联修复成功")
        
    except Exception as e:
        print(f"❌ 操作失败: {e}")
    finally:
        db.close()


if __name__ == "__main__":
    check_admin()
