from decimal import Decimal
from django.contrib import admin
from .models import PatientService, PatientServiceItem, Service

@admin.register(Service)
class ServiceAdmin(admin.ModelAdmin):
    list_display = ['name', 'unit_price', 'status']
    search_fields = ['name']
    actions = ['delete_selected_service']

    def delete_selected_service(self, request, queryset):
        # Your delete logic here
        pass
    delete_selected_service.short_description = "Delete Selected Services"
    delete_selected_service.__name__ = "delete_selected_service"  # Ensure unique name

class PatientServiceItemInline(admin.TabularInline):
    model = PatientServiceItem
    extra = 1  # Number of extra blank forms to display
    fields = ('service', 'number_of_units',  'total_price')
    readonly_fields = ('total_price',)

    def total_price(self, obj):
        # Show total price for each service item inline
        return obj.total_price()

    total_price.short_description = 'Total Price Per Item'

@admin.register(PatientService)
class PatientServiceAdmin(admin.ModelAdmin):
    list_display = ('patient', 'doctor', 'technician', 'created_at_formatted', 'total_price')
    list_filter = ('doctor', 'technician', 'created_at')
    search_fields = ('patient__first_name', 'patient__last_name', 'doctor__first_name', 'doctor__last_name', 'technician__first_name', 'technician__last_name')
    date_hierarchy = 'created_at'  # Allows filtering by date in the admin
    inlines = [PatientServiceItemInline]
    actions = ['delete_selected_patient_service']

    def delete_selected_patient_service(self, request, queryset):
        # Your delete logic here
        pass
    delete_selected_patient_service.short_description = "Delete Selected Patient Services"
    delete_selected_patient_service.__name__ = "delete_selected_patient_service"  # Ensure unique name

    def created_at_formatted(self, obj):
        return obj.created_at.strftime('%Y-%m-%d %H:%M:%S')

    created_at_formatted.short_description = 'Created At'

    def total_price(self, obj):
        # Ensure total_price calculation is robust in case of missing related items
        total = obj.total_price() if obj.total_price() else Decimal('0.00')
        return f"${total:.2f}"

    total_price.short_description = 'Total Price'

@admin.register(PatientServiceItem)
class PatientServiceItemAdmin(admin.ModelAdmin):
    list_display = ('patient_service', 'service', 'number_of_units',  'total_price')
    search_fields = ('patient_service__patient__first_name', 'patient_service__patient__last_name', 'service__name')
    actions = ['delete_selected_patient_service_item']

    def delete_selected_patient_service_item(self, request, queryset):
        # Your delete logic here
        pass
    delete_selected_patient_service_item.short_description = "Delete Selected Patient Service Items"
    delete_selected_patient_service_item.__name__ = "delete_selected_patient_service_item"  # Ensure unique name

    def total_price(self, obj):
        return obj.total_price()

    total_price.short_description = 'Total Price'