from django.conf import settings
from django.contrib import admin
from rest_framework.fields import ReadOnlyField
from collaborators.models import Access, InviteAccess
from django.utils.html import format_html
from collaborators  import defined_roles as dr

if settings.DJANGO_ADMIN_IS_ENABLED:
    
    class AccessAdmin(admin.ModelAdmin):
        list_display = ('user_full_name', 'institute_name', 'human_readable_roles',
                        'modified_at', 'institute_created_at')
        # search_fields = ('id', 'email', 'created_at')
        # readonly_fields = ('verification_codes',)
        def user_full_name(self, obj):
            return f"{obj.user.first_name} {obj.user.last_name}"
        
        def human_readable_roles(self, obj):
            result = []
            for role in obj.roles:
                if role == dr.__ROLE_OWNER__:
                    result.append("Owner")
                elif  role == dr.__ROLE_SUPER_ADMIN__:
                    result.append("Super Admin")
                elif  role == dr.__ROLE_ADMIN__:
                        result.append("Admin")
               
                else:
                    result.append(role)
                    
                return result
                
        def institute_name(self, obj):
            return format_html(f"<a href= '/admin/institute/institute/{obj.institute.id}'>{obj.institute.name}</a>", url=obj.institute)

    admin.site.register(Access, AccessAdmin)

    class InviteAccessAdmin(admin.ModelAdmin):
        list_display = ('modifire', 'invited_user_full_name','invited_phone','invited_email', 'institute_name',
                        'human_readable_roles', 'created_at')
        search_fields = ('invited_user', 'invited_phone','invited_email')
        def invited_user_full_name(self, obj):
            if obj.invited_user:
                return f"{obj.invited_user.first_name} {obj.invited_user.last_name}"
        def institute_name(self, obj):
            return format_html(f"<a href= '/admin/institute/institute/{obj.institute.id}'>{ obj.institute.name}</a>", url=obj.institute)

        def human_readable_roles(self, obj):
            result = []
            for role in obj.roles:
                if role == dr.__ROLE_OWNER__:
                    result.append("Owner")
                elif  role == dr.__ROLE_SUPER_ADMIN__:
                    result.append("Super Admin")
                elif  role == dr.__ROLE_ADMIN__:
                        result.append("Admin")
               
                else:
                    result.append(role)
                    
                return result
    admin.site.register(InviteAccess, InviteAccessAdmin)

else:
    class AccessAdmin(admin.ModelAdmin):

        def has_add_permission(self, request):
            return False

        def has_change_permission(self, request, obj=None):
            return False

        def has_delete_permission(self, request, obj=None):
            return False

        list_display = ('user', 'institute', 'roles',
                        'institute_name', 'modified_at', 'institute_created_at')
        # search_fields = ('id', 'email', 'created_at')
        readonly_fields = ('user', 'institute', 'modified_at', 'roles',
                           'institute_name', 'institute_created_at')

    admin.site.register(Access, AccessAdmin)

    class InviteAccessAdmin(admin.ModelAdmin):

        def has_add_permission(self, request):
            return False

        def has_change_permission(self, request, obj=None):
            return False

        def has_delete_permission(self, request, obj=None):
            return False

        list_display = ('modifire', 'invited_user', 'institute',
                        'roles', 'key', 'created_at')
        # search_fields = ('id', 'email')
        readonly_fields = ('modifire', 'invited_user', 'institute',
                           'created_at', 'roles' )

    admin.site.register(InviteAccess, InviteAccessAdmin)
