from django.contrib import admin, messages

from .models import CompanySubscription, SeekerSubscription, SubscriptionPlan, SubscriptionUsageEvent, PaymentMethod, SubscriptionPayment


@admin.register(PaymentMethod)
class PaymentMethodAdmin(admin.ModelAdmin):
    list_display = ('name', 'slug', 'is_active', 'sort_order', 'legacy_id')
    list_filter = ('is_active',)
    prepopulated_fields = {'slug': ('name',)}


@admin.register(SubscriptionPayment)
class SubscriptionPaymentAdmin(admin.ModelAdmin):
    list_display = ('user', 'plan', 'payment_method', 'amount', 'status', 'paid_at', 'created_at')
    list_filter = ('status', 'payment_method', 'plan')
    search_fields = ('user__email', 'txn_reference', 'provider_reference')
    raw_id_fields = ('user', 'company', 'plan', 'payment_method')


@admin.register(SubscriptionPlan)
class SubscriptionPlanAdmin(admin.ModelAdmin):
    list_display = ('name', 'audience', 'category', 'price_monthly', 'is_featured', 'is_active')
    list_filter = ('audience', 'category', 'is_featured', 'is_active')
    prepopulated_fields = {'slug': ('name',)}


@admin.register(SeekerSubscription)
class SeekerSubscriptionAdmin(admin.ModelAdmin):
    list_display = ('user', 'plan', 'is_active', 'started_at', 'expires_at', 'valid_display')
    list_filter = ('is_active', 'plan')
    search_fields = ('user__email', 'user__username', 'user__first_name', 'user__last_name')
    raw_id_fields = ('user',)
    actions = ('activate_permanent',)

    @admin.display(boolean=True, description='Valid now')
    def valid_display(self, obj):
        return obj.is_valid

    @admin.action(description='Activate permanently (no expiry)')
    def activate_permanent(self, request, queryset):
        count = 0
        for subscription in queryset:
            subscription.is_active = True
            subscription.expires_at = None
            subscription.save(update_fields=['is_active', 'expires_at'])
            count += 1
        self.message_user(request, f'{count} subscription(s) activated with no expiry.', messages.SUCCESS)


@admin.register(SubscriptionUsageEvent)
class SubscriptionUsageEventAdmin(admin.ModelAdmin):
    list_display = ('company', 'event_type', 'seeker_profile', 'actor', 'created_at')
    list_filter = ('event_type', 'created_at')
    search_fields = ('company__name', 'actor__email', 'seeker_profile__full_name')
    raw_id_fields = ('company', 'actor', 'seeker_profile')


@admin.register(CompanySubscription)
class CompanySubscriptionAdmin(admin.ModelAdmin):
    list_display = ('company', 'plan', 'is_active', 'started_at', 'expires_at', 'valid_display')
    list_filter = ('is_active', 'plan')
    search_fields = ('company__name', 'company__owner__email', 'legacy_txn')
    raw_id_fields = ('company',)
    actions = ('activate_permanent',)

    @admin.display(boolean=True, description='Valid now')
    def valid_display(self, obj):
        return obj.is_valid

    @admin.action(description='Activate permanently (no expiry)')
    def activate_permanent(self, request, queryset):
        count = 0
        for subscription in queryset:
            subscription.is_active = True
            subscription.expires_at = None
            subscription.save(update_fields=['is_active', 'expires_at'])
            count += 1
        self.message_user(request, f'{count} subscription(s) activated with no expiry.', messages.SUCCESS)
