from django.contrib import admin, messages
from django.urls import path, reverse
from django.utils.html import format_html
from django.shortcuts import redirect
from .models import PaymentLog, CalculationDates
# Register your models here.
@admin.register(PaymentLog)
class PaymentLogAdmin(admin.ModelAdmin):
    list_display = ['tenant', 'amount', 'status', 'log_type', 'created_at', 'mark_as_paid']
    # search_fields = ['paymentlog__tenant__name',]
    list_filter = ['status', 'tenant', 'log_type']
    readonly_fields=['tenant', 'room']

    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path(
                'paymentlog/<int:paymentlog_id>/mark_as_paid/',
                self.admin_site.admin_view(self.mark_as_paid_view),
                name='paymentlog_mark_as_paid',
            )
        ]
        return custom_urls + urls

    def mark_as_paid(self, obj):
        if obj.status == "pending":
            return format_html(
                '<a class="button" href="{}">Mark as Paid</a>',
                reverse('admin:paymentlog_mark_as_paid', args=[obj.pk]),
            )

        return format_html("""<svg stroke="currentColor" fill="#00ff00" stroke-width="0" viewBox="0 0 512 512" height="1.5em" width="1.5em" xmlns="http://www.w3.org/2000/svg"><path d="M170.718 216.482L141.6 245.6l93.6 93.6 208-208-29.118-29.118L235.2 279.918l-64.482-63.436zM422.4 256c0 91.518-74.883 166.4-166.4 166.4S89.6 347.518 89.6 256 164.482 89.6 256 89.6c15.6 0 31.2 2.082 45.764 6.241L334 63.6C310.082 53.2 284.082 48 256 48 141.6 48 48 141.6 48 256s93.6 208 208 208 208-93.6 208-208h-41.6z"></path></svg>""")

    mark_as_paid.short_description = 'Mark as Paid' # type: ignore

    def mark_as_paid_view(self, request, paymentlog_id):
        try:
            payment_log = PaymentLog.objects.get(pk=paymentlog_id) # type: ignore
        except PaymentLog.DoesNotExist: # type: ignore
            self.message_user(request, "Payment log not found.", level=messages.ERROR)
            return redirect('admin:paymentlog_paymentlog_changelist')  # Redirect to the changelist

        payment_log.status = 'paid'  # Or whatever your paid status is
        payment_log.save()
        self.message_user(request, f"Payment log for {payment_log.tenant} marked as paid.", level=messages.SUCCESS)
        return redirect('admin:paymentlog_paymentlog_changelist')  # Redirect to the changelist

@admin.register(CalculationDates)
class CalculationDatesAdmin(admin.ModelAdmin):
    list_display = ('get_tenant_name', 'last_rent_calculation', 'last_food_calculation', 'last_electricity_calculation')
    list_filter = ('tenant',)
    search_fields = ('tenant__name',)

    def get_tenant_name(self, obj):
        return obj.tenant.name
    get_tenant_name.short_description = 'Tenant Name'
    get_tenant_name.admin_order_field = 'tenant__name'
