"""Create an admin user for initial setup."""
import sys
from pathlib import Path

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

from shared.database import SessionLocal
from shared.models import User
from shared.auth import get_password_hash
from shared.logging_config import logger


def create_admin_user(email: str, username: str, password: str):
    """Create an admin user.
    
    Args:
        email: Admin email
        username: Admin username
        password: Admin password
    """
    db = SessionLocal()
    
    try:
        # Check if user already exists
        existing_user = db.query(User).filter(
            (User.email == email) | (User.username == username)
        ).first()
        
        if existing_user:
            logger.error(f"User with email '{email}' or username '{username}' already exists")
            return
        
        # Create admin user
        admin_user = User(
            email=email,
            username=username,
            hashed_password=get_password_hash(password),
            is_active=True,
            is_admin=True,
            tier="enterprise"
        )
        
        db.add(admin_user)
        db.commit()
        db.refresh(admin_user)
        
        logger.info(f"Admin user created successfully!")
        logger.info(f"Email: {email}")
        logger.info(f"Username: {username}")
        logger.info(f"User ID: {admin_user.id}")
        
    except Exception as e:
        db.rollback()
        logger.error(f"Failed to create admin user: {e}")
    finally:
        db.close()


def main():
    """Main function to create admin user."""
    import argparse
    
    parser = argparse.ArgumentParser(description="Create an admin user")
    parser.add_argument("--email", required=True, help="Admin email")
    parser.add_argument("--username", required=True, help="Admin username")
    parser.add_argument("--password", required=True, help="Admin password")
    
    args = parser.parse_args()
    
    create_admin_user(args.email, args.username, args.password)


if __name__ == "__main__":
    main()
