#!/usr/bin/env python3
"""
Script to create user profile for existing user and assign default role
"""

import asyncio
import sys
from bson import ObjectId

# Add shared modules to path
sys.path.append('/app')

from app.models.user_profile import UserProfile
from app.models.role import Role, RoleType
from app.models.user_role import UserRole
from shared.database import connect_to_mongo, init_database

async def create_user_profile():
    """Create user profile for existing user and assign default role"""
    try:
        # Connect to database
        await connect_to_mongo()
        await init_database([UserProfile, Role, UserRole])
        
        print("Connected to database successfully")
        
        # User details from the auth service (test2)
        user_id = ObjectId('689f86446a45c98673b2fd70')
        email = 'test2@gmail.com'
        username = 'test2'
        
        print(f"Creating profile for user: {username} ({email})")
        
        # Check if profile already exists
        existing_profile = await UserProfile.find_one(UserProfile.user_id == user_id)
        if existing_profile:
            print(f"Profile already exists for user {username}")
        else:
            # Create user profile
            profile = await UserProfile.create_from_auth_user(
                user_id=user_id,
                email=email,
                username=username
            )
            print(f"✓ Created profile for user {username}")
        
        # Get or create default role
        default_role = await Role.find_one(Role.name == "user")
        if not default_role:
            print("Creating default 'user' role...")
            default_role = Role(
                name="user",
                display_name="Regular User",
                description="Default user role",
                role_type=RoleType.SYSTEM,
                is_system_role=True,
                is_default=True,
                priority=100,
                color="#0000FF",
                permissions=["profile.read.own", "profile.write.own"]
            )
            await default_role.save()
            print("Default role created successfully")
        else:
            print("Default role already exists")
        
        # Check if user already has roles
        user_roles = await UserRole.get_user_roles(user_id, active_only=True)
        
        if not user_roles:
            print(f"User {username} has no roles, assigning default role...")
            
            try:
                # Assign default role
                user_role = UserRole(
                    user_id=user_id,
                    role_name=default_role.name,
                    notes="Default role assignment by script",
                    is_active=True
                )
                await user_role.save()
                print(f"✓ Assigned default role to {username}")
            except Exception as e:
                print(f"✗ Failed to assign role to {username}: {e}")
        else:
            print(f"User {username} already has roles: {[role.role_name for role in user_roles]}")
        
        print("User profile and role setup completed successfully")
        
    except Exception as e:
        print(f"Error: {e}")
        raise
    finally:
        # Close database connection
        from shared.database import close_mongo_connection
        await close_mongo_connection()

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