from django.contrib import admin

from .models import (
    Module, Feature, Permission, Role, RolePermission, StaffRole,
)


class FeatureInline(admin.TabularInline):
    model = Feature
    extra = 0


@admin.register(Module)
class ModuleAdmin(admin.ModelAdmin):
    list_display = ('code', 'name', 'casl_subject', 'order', 'is_active')
    search_fields = ('code', 'name')
    inlines = [FeatureInline]


@admin.register(Feature)
class FeatureAdmin(admin.ModelAdmin):
    list_display = ('module', 'code', 'name', 'is_active')
    list_filter = ('module',)
    search_fields = ('code', 'name')


@admin.register(Permission)
class PermissionAdmin(admin.ModelAdmin):
    list_display = ('codename', 'feature', 'action', 'is_active')
    list_filter = ('action', 'feature__module')
    search_fields = ('codename', 'name')


class RolePermissionInline(admin.TabularInline):
    model = RolePermission
    extra = 0
    raw_id_fields = ('permission',)


@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
    list_display = ('name', 'company_profile', 'is_system', 'recycle_bin')
    list_filter = ('company_profile', 'is_system', 'recycle_bin')
    search_fields = ('name',)
    inlines = [RolePermissionInline]


@admin.register(StaffRole)
class StaffRoleAdmin(admin.ModelAdmin):
    list_display = ('staff_profile', 'role', 'branch', 'main_branch_only', 'is_active')
    list_filter = ('role', 'is_active')
    raw_id_fields = ('staff_profile', 'role', 'branch', 'assigned_by')
