import django
import os
import sys

def update_permissions():
    from django.contrib.auth.models import Group, Permission
    from core.roles import (
        ADMIN,
        DEFAULT_ROLE_PERMISSIONS,
        MANAGED_ROLES,
    )

    for role in MANAGED_ROLES:
        group, _ = Group.objects.get_or_create(name=role)
        if role == ADMIN:
            group.permissions.set(Permission.objects.all())
            print(f"Updated ADMIN group with all permissions")
            continue
        
        perms = []
        for key in DEFAULT_ROLE_PERMISSIONS.get(role, []):
            app_label, codename = key.split(".", 1)
            perm = Permission.objects.filter(
                content_type__app_label=app_label, codename=codename
            ).first()
            if perm:
                perms.append(perm)
                print(f"Found permission {key} for role {role}")
            else:
                print(f"WARNING: Permission {key} not found for role {role}")
        
        # Add the new permissions to the group without overwriting existing ones
        for perm in perms:
            group.permissions.add(perm)
        
        group.save()
        print(f"Updated permissions for group {role}")
    
    print("Permission update complete!")

if __name__ == "__main__":
    # Set up Django
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
    django.setup()
    
    update_permissions()
