from django.core.management import BaseCommand
from django.contrib.auth.models import User, Group , Permission
import logging

GROUPS = {
    "Developer": {
        #General permissions
        #"log entry" : ["add","delete","change","view"],
        #"group" : ["add","delete","change","view"],
        #"permission" : ["add","delete","change","view"],
        #"user" : ["add","delete","change","view"],
        #"content type" : ["add","delete","change","view"],
        #"session" : ["add","delete","change","view"],

        #Specific permissions
        "profile" : ["add","delete","change","view"],
        "experiment" : ["add","delete","change","view"],
        "configuration" : ["add","delete","change","view"],
        "device" : ["add","delete","change","view"],
        "device type" : ["add","delete","change","view"],
        "generator configuration" : ["add","delete","change","view"],
        "pedestal configuration" : ["add","delete","change","view"],
        "usrprx configuration" : ["add","delete","change","view"],
        "tx code" : ["add","delete","change","view"],       
        "usrptx configuration" : ["add","delete","change","view"],
    },

    "Operator": {
        #Specific permissions
        "profile" : ["view"],
        "experiment" : ["view"],
        "configuration" : ["view"],
        "device" : ["view"],
        "device type" : ["view"],
        "generator configuration" : ["view"],
        "pedestal configuration" : ["view"],
        "usrprx configuration" : ["view"],
        "tx code" : ["view"],       
        "usrptx configuration" : ["view"],
    },
}

class Command(BaseCommand):

    help = "Creates read only default permission groups for users"

    def handle(self, *args, **options):    
        for group_name in GROUPS:
            try:
                Group.objects.get(name=group_name)
                self.stdout.write(f'Local group "{group_name}" currently exists')
                continue
            except:
                new_group = Group.objects.create(name=group_name)
                # Loop models in group
                for app_model in GROUPS[group_name]:

                    # Loop permissions in group/model
                    for permission_name in GROUPS[group_name][app_model]:

                        # Generate permission name as Django would generate it
                        name = "Can {} {}".format(permission_name, app_model)
                        self.stdout.write(f'Creating "{name}"')

                        try:
                            model_add_perm = Permission.objects.get(name=name)
                        except Permission.DoesNotExist:
                            logging.warning("Permission not found with name '{}'.".format(name))
                            continue

                        new_group.permissions.add(model_add_perm)