from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from users.models import *
from organisations.models import *

class Command(BaseCommand):

    def handle(self, *args, **options):
        if not get_user_model().objects.filter(username="demo2020").exists():

            # create organisation type
            org_typ = OrganisationType.objects.create(org_type="Administration")

            # create organisation
            organisation_field={"name":"Questbanker",'organisation_type':org_typ}
            organisation = Organisation.objects.create(**organisation_field)

            # create orgation branch
            organisation_branch_field={"name":"Kabaale", "branch_organisation":organisation}
            organisation_branch = OrganisationBranch.objects.create(**organisation_branch_field)

            # create staff
            staff_field={"name":"Demo Demo","staff_organisation":organisation}
            staff = Staff.objects.create(**staff_field)
            
            user_field = {"user_organisation_branch":organisation_branch, "user_staff":staff}
            user = get_user_model().objects.create_superuser("demo2020", "admin@questbanker.com", "demo2022", **user_field)
        
        #create ROOT ADMIN role.
        if get_user_model().objects.filter(username="demo2020").exists():
           root_admin      = get_user_model().objects.filter(username="demo2020").first()
           if not  UserRole.objects.filter(role_name = "ROOT_ADMIN").exists():
                # Create Role
                role_field={"role_name":"ROOT_ADMIN","role_desc":"ROOT_ADMIN", "is_active":True,"role_added_by":root_admin.id,"role_org":root_admin.user_organisation_branch.branch_organisation}
                user_role = UserRole.objects.create(**role_field)
                if not  UserAssignedRole.objects.filter(user =root_admin).exists():
                    # Assign Role
                    assigned_role_field={"assigned_role":user_role,"user":root_admin, "is_active":True,"assigned_role_added_by":root_admin}
                    UserAssignedRole.objects.create(**assigned_role_field)
                else:
                    root_role  = UserAssignedRole.objects.filter(user=root_admin).first()
                    root_role.assigned_role = user_role
                    root_role.save()

                
           
            