#!/usr/bin/env python
"""Script to create multiple module-specific manager accounts for RBAC testing."""
import os
import sys
import django

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')
django.setup()

from modules.authentication.models import User
from modules.team.models import TeamMember
from django.db import transaction

managers = [
    {
        'email': 'crm_manager@fudo.local',
        'first_name': 'CRM',
        'last_name': 'Manager',
        'password': 'password123',
        'role': 'MANAGER',
    },
    {
        'email': 'erp_manager@fudo.local',
        'first_name': 'ERP',
        'last_name': 'Manager',
        'password': 'password123',
        'role': 'MANAGER',
    },
    {
        'email': 'logistics_manager@fudo.local',
        'first_name': 'Logistics',
        'last_name': 'Manager',
        'password': 'password123',
        'role': 'MANAGER',
    },
    {
        'email': 'customs_manager@fudo.local',
        'first_name': 'Customs',
        'last_name': 'Manager',
        'password': 'password123',
        'role': 'MANAGER',
    },
    {
        'email': 'hr_manager@fudo.local',
        'first_name': 'HR',
        'last_name': 'Manager',
        'password': 'password123',
        'role': 'HR',
    },
]

def create_module_managers():
    first_member = TeamMember.objects.first()
    if not first_member:
        print("ERROR: No organization found. Please ensure there is at least one member in the system.")
        return
    
    org_id = first_member.tenant_id
    print(f"Using organization: {org_id}")

    with transaction.atomic():
        for m in managers:
            user, created = User.objects.get_or_create(
                email=m['email'],
                defaults={
                    'first_name': m['first_name'],
                    'last_name': m['last_name'],
                    'is_active': True,
                }
            )
            if created:
                user.set_password(m['password'])
                user.save()
                print(f"Created user: {user.email}")
            else:
                print(f"User already exists: {user.email}")
            
            member, created = TeamMember.objects.get_or_create(
                tenant_id=org_id,
                user=user,
                defaults={'role': m['role'], 'status': 'ACTIVE'}
            )
            if created:
                print(f"Created team member {m['first_name']} with role {m['role']}")
            else:
                member.role = m['role']
                member.status = 'ACTIVE'
                member.save()
                print(f"Updated team member {m['first_name']} to role {m['role']}")

    print("\nAll module managers created successfully!")
    for m in managers:
        print(f"- {m['first_name']} Manager: {m['email']} (Password: {m['password']}, Role: {m['role']})")

if __name__ == '__main__':
    create_module_managers()
