"""
创建管理员账号 — 交互式命令行脚本

用法:
    cd backend
    py -3.12 scripts/create_admin.py
"""

import sys
from pathlib import Path

# 确保 backend/ 目录在 sys.path 中，使 app.* 导入正常工作
backend_dir = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(backend_dir))

from getpass import getpass

from sqlmodel import Session, select

from app.core.security import hash_password
from app.db.session import engine
from app.models.user import User, UserRole


def main():
    print("=" * 50)
    print("  军事科技工作台 — 创建管理员账号")
    print("=" * 50)
    print()

    username = input("请输入用户名: ").strip()
    if not username:
        print("❌ 用户名不能为空")
        sys.exit(1)

    display_name = input("请输入显示名（中文姓名）: ").strip()
    if not display_name:
        print("❌ 显示名不能为空")
        sys.exit(1)

    password = getpass("请输入密码（输入不显示）: ").strip()
    if not password:
        print("❌ 密码不能为空")
        sys.exit(1)

    password_confirm = getpass("请再次输入密码确认: ").strip()
    if password != password_confirm:
        print("❌ 两次输入的密码不一致")
        sys.exit(1)

    with Session(engine) as session:
        # 检查用户名是否已存在
        existing = session.exec(
            select(User).where(User.username == username)
        ).first()
        if existing:
            print(f"❌ 用户名「{username}」已存在，请换一个用户名")
            sys.exit(1)

        user = User(
            username=username,
            display_name=display_name,
            password_hash=hash_password(password),
            role=UserRole.zhipianren,
            is_active=True,
        )
        session.add(user)
        session.commit()
        session.refresh(user)

        print()
        print("✅ 管理员账号创建成功！")
        print(f"   用户名: {user.username}")
        print(f"   显示名: {user.display_name}")
        print(f"   角色:   {user.role.value}（制片人/管理员）")
        print(f"   ID:     {user.id}")
        print()


if __name__ == "__main__":
    main()