from django.contrib import admin
from django.utils.html import format_html
from .models import Room
from django.urls import path, reverse
from .views import RoomDetailsView, UpdateElectricityReadingView
from .services import get_room_occupancy


# Register your models here.
@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
    list_display = ['room_number','occupancy', 'hostel', 'room_type', 'total_beds', 'price_per_month', 'is_bookable', 'custom_actions']
    search_fields = ['room_number', 'hostel__name']
    list_filter = ['room_type']
    readonly_fields=['room_number', 'last_electricity_reading'] # add 'last_rent_calculation_date'

    @admin.display(description='Occupancy')
    def occupancy(self, obj):
        tenants_in_room = get_room_occupancy(obj.id)
        return format_html(f'<span>{tenants_in_room} Tenant{"s" if tenants_in_room > 1 else ""}</span>')


    @admin.display(description='Actions')
    def custom_actions(self, obj):
        url = reverse('admin:view_room', args=[obj.pk])
        return format_html('<a href="{}" class="button">View</a>', url)

    @admin.display(boolean=True)
    def is_bookable(self, obj):
        return obj.is_bookable


    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('room/<int:room_id>', self.admin_site.admin_view(RoomDetailsView.as_view()), name="view_room"),
            path('room/<int:room_id>/update-electricity-reading', self.admin_site.admin_view(UpdateElectricityReadingView.as_view()), name="update_electricity_reading"),
        ]
        return custom_urls + urls
