from django.contrib import admin
from .models import PaymentLog, Activation, Deactivation
from django.utils.timezone import localtime
from datetime import timedelta
import pytz

from django.contrib.admin.views.main import ChangeList
from .models import PaymentLog


class PaymentLogAdmin(admin.ModelAdmin):
    list_display = ("client_id", "client_name", "amount", "currency", "device_id", "pack_or_channel_id", "created_at_ist")
    list_filter = ('status', 'created_at')
    readonly_fields = ("client_id", "client_name", "amount", "currency", "device_id", "pack_or_channel_id", "request_data", "response_data", "created_at")

    def changelist_view(self, request, extra_context=None):
        extra_context = extra_context or {}
        response = super().changelist_view(request, extra_context)
        try:
            cl = response.context_data['cl']
            filtered_total = cl.result_count
            extra_context['subtitle'] = f"Total Subscriptions: {filtered_total}"
            response.context_data.update(extra_context)
        except (AttributeError, KeyError):
            pass
        return response

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def created_at_ist(self, obj):
        ist = pytz.timezone('Asia/Kolkata')
        return obj.created_at.astimezone(ist).strftime("%Y-%m-%d %H:%M:%S")
    created_at_ist.short_description = "Created At (IST)"


# Register PaymentLog in admin
admin.site.register(PaymentLog, PaymentLogAdmin)

# Set a custom header, title, and index title for the admin site
admin.site.site_header = "Skyplay API Hub"
admin.site.site_title = "Skyplay API Hub"
admin.site.index_title = "Welcome to Skyplay API Hub"




class ActivationAdmin(admin.ModelAdmin):
    list_display = ('client_id', 'channel_id', 'end_date', 'device_id')  # Use actual model fields
    search_fields = ('client_id', 'channel_id', 'device_id')
    list_filter = ('end_date',)
    class Media:
        js = ('js/admin_activation.js',)  # Path to your script

    def save_model(self, request, obj, form, change):
        try:
            super().save_model(request, obj, form, change)
        except Exception as e:
            print("Error saving Activation:", e)
            raise e
admin.site.register(Activation, ActivationAdmin)


class DeactivationAdmin(admin.ModelAdmin):
    list_display = ('client_id', 'channel_id', 'deactivated_at', 'deactivated_by', 'status')  # Display deactivation details
    search_fields = ('client_id', 'channel_id', 'deactivated_by__username')  # Search by deactivated_by (username)
    list_filter = ('end_date', 'status', 'deactivated_at', 'deactivated_by')  # Filter by deactivation time and user

    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        # Optional: You could filter the queryset based on the logged-in user or other criteria
        return queryset

admin.site.register(Deactivation, DeactivationAdmin)
