from django.contrib import admin
from user_roles.models import Role, UserRole
from user_roles.mixins import OwnerOnlyAdminMixin
from tenants.admin_mixins import TenantAdminOnlyMixin


@admin.register(Role)
class RoleAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
    """
    Админка ролей.
    TenantAdminOnlyMixin - скрывает от public admin (localhost/admin/),
    так как таблица Role существует только в схемах тенантов.
    """
    list_display = ['code', 'name', 'is_system']
    list_filter = ['is_system']
    search_fields = ['code', 'name']
    readonly_fields = ['created_at']

    def has_delete_permission(self, request, obj=None):
        """Запрет удаления системных ролей"""
        if obj and obj.is_system:
            return False
        return super().has_delete_permission(request, obj)


@admin.register(UserRole)
class UserRoleAdmin(TenantAdminOnlyMixin, OwnerOnlyAdminMixin, admin.ModelAdmin):
    """
    Админка ролей пользователей.

    TenantAdminOnlyMixin - скрывает от public admin (таблица только в tenant схемах)
    OwnerOnlyAdminMixin - доступна только владельцу магазина

    ВАЖНО: UserRole изолирован по тенантам автоматически через django-tenants,
    поэтому владелец видит только пользователей своего магазина!
    """
    list_display = ['user', 'role', 'is_active', 'created_at']
    list_filter = ['role', 'is_active']
    search_fields = ['user__email', 'user__name']
    readonly_fields = ['created_at', 'created_by']
    autocomplete_fields = ['user']

    def save_model(self, request, obj, form, change):
        """Автоматически устанавливаем created_by"""
        if not change:
            obj.created_by = request.user
        super().save_model(request, obj, form, change)
