from django.contrib import admin
from django.db.models import ProtectedError

from .helpers import clear_cache
from .models import Industry, IndustryAlias, SubIndustry


class SubIndustryInline(admin.TabularInline):
    model = SubIndustry
    extra = 1
    fields = ('name', 'sort_order', 'is_active')


@admin.action(description='Activate selected')
def activate(modeladmin, request, queryset):
    queryset.update(is_active=True)
    clear_cache()


@admin.action(description='Deactivate selected')
def deactivate(modeladmin, request, queryset):
    queryset.update(is_active=False)
    clear_cache()


@admin.register(Industry)
class IndustryAdmin(admin.ModelAdmin):
    list_display = ('name', 'sub_industry_count', 'sort_order', 'is_active')
    list_editable = ('sort_order', 'is_active')
    search_fields = ('name', 'description')
    prepopulated_fields = {'slug': ('name',)}
    inlines = [SubIndustryInline]
    actions = [activate, deactivate]

    @admin.display(description='Sub-industries')
    def sub_industry_count(self, obj):
        return obj.sub_industries.count()

    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        clear_cache()

    def save_formset(self, request, form, formset, change):
        super().save_formset(request, form, formset, change)
        clear_cache()


@admin.register(SubIndustry)
class SubIndustryAdmin(admin.ModelAdmin):
    list_display = ('name', 'industry', 'sort_order', 'is_active')
    list_editable = ('sort_order', 'is_active')
    list_filter = ('industry', 'is_active')
    search_fields = ('name', 'industry__name')
    autocomplete_fields = ['industry']

    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        clear_cache()


@admin.register(IndustryAlias)
class IndustryAliasAdmin(admin.ModelAdmin):
    list_display = ('term', 'industry', 'sub_industry')
    search_fields = ('term',)
    autocomplete_fields = ['industry', 'sub_industry']

    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        clear_cache()
