"""Script to seed initial admin user."""

import sys
from pathlib import Path

# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))

from sqlalchemy.orm import Session

from app.database import SessionLocal
from app.models.admin_user import AdminRole, AdminUser
from app.utils.security import get_password_hash


def create_admin_user(
    username: str = "admin",
    email: str = "admin@proconnect-edu.online",
    password: str = "admin#123",
    role: AdminRole = AdminRole.SUPER_ADMIN,
):
    """Create an admin user."""
    db: Session = SessionLocal()
    try:
        # Check if user already exists
        existing_user = db.query(AdminUser).filter(
            (AdminUser.username == username) | (AdminUser.email == email)
        ).first()
        
        if existing_user:
            print(f"Admin user with username '{username}' or email '{email}' already exists.")
            return existing_user
        
        # Create new admin user
        admin_user = AdminUser(
            username=username,
            email=email,
            password_hash=get_password_hash(password),
            role=role,
            is_active=True,
        )
        
        db.add(admin_user)
        db.commit()
        db.refresh(admin_user)
        
        print(f"Admin user created successfully!")
        print(f"  Username: {username}")
        print(f"  Email: {email}")
        print(f"  Role: {role.value}")
        print(f"  Password: {password}")
        print("\nWARNING: Please change the default password after first login!")
        
        return admin_user
    except Exception as e:
        db.rollback()
        print(f"Error creating admin user: {e}")
        raise
    finally:
        db.close()


if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(description="Create an admin user")
    parser.add_argument("--username", default="admin", help="Admin username")
    parser.add_argument("--email", default="admin@proconnect.edu.ng", help="Admin email")
    parser.add_argument("--password", default="admin123", help="Admin password")
    parser.add_argument("--role", default="super_admin", choices=["admin", "super_admin", "viewer"], help="Admin role")
    
    args = parser.parse_args()
    
    role_map = {
        "admin": AdminRole.ADMIN,
        "super_admin": AdminRole.SUPER_ADMIN,
        "viewer": AdminRole.VIEWER,
    }
    
    create_admin_user(
        username=args.username,
        email=args.email,
        password=args.password,
        role=role_map[args.role],
    )
