from django.contrib import admin
from .models import Restaurant, MenuItem, Booking, BookingItem, Table, DeliveryLocationLog, Combo, ComboItem, MenuCategory


@admin.register(Restaurant)
class RestaurantAdmin(admin.ModelAdmin):
    list_display = ['name', 'location', 'cuisine', 'rating', 'is_active', 'is_delivery_available', 'is_dine_in_available']
    list_filter = ['cuisine', 'is_active', 'is_delivery_available', 'is_dine_in_available', 'is_takeaway_available']
    search_fields = ['name', 'location', 'cuisine']
    list_editable = ['is_active']
    readonly_fields = ['created_at', 'updated_at']
    fieldsets = (
        ('Basic Info', {
            'fields': ('name', 'description', 'location', 'address', 'cuisine', 'rating', 'image', 'owner')
        }),
        ('GPS Location', {
            'fields': ('latitude', 'longitude')
        }),
        ('Availability', {
            'fields': ('is_delivery_available', 'is_dine_in_available', 'is_takeaway_available', 'is_active')
        }),
        ('Delivery Settings', {
            'fields': ('delivery_radius_km',)
        }),
        ('Operating Hours', {
            'fields': ('opening_time', 'closing_time')
        }),
        ('Table Configuration', {
            'fields': ('tables_available', 'max_party_size')
        }),
        ('Pricing', {
            'fields': ('average_cost_for_two',)
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(MenuItem)
class MenuItemAdmin(admin.ModelAdmin):
    list_display = ['name', 'restaurant', 'category', 'price', 'is_available', 'is_vegetarian']
    list_filter = ['restaurant', 'category', 'is_available', 'is_vegetarian', 'is_vegan']
    search_fields = ['name', 'restaurant__name']
    list_editable = ['is_available', 'price']


@admin.register(Booking)
class BookingAdmin(admin.ModelAdmin):
    list_display = ['id', 'restaurant', 'customer_name', 'booking_type', 'status', 'payment_status', 'total_amount', 'created_at']
    list_filter = ['booking_type', 'status', 'payment_status', 'created_at']
    search_fields = ['customer_name', 'contact_number', 'restaurant__name']
    readonly_fields = ['created_at', 'updated_at', 'distance_km', 'is_distance_warning', 'distance_warning_message']
    list_editable = ['status', 'payment_status']
    date_hierarchy = 'created_at'



@admin.register(BookingItem)
class BookingItemAdmin(admin.ModelAdmin):
    list_display = ['booking', 'menu_item', 'quantity', 'unit_price', 'total_price']
    list_filter = ['booking__restaurant']
    search_fields = ['booking__customer_name', 'menu_item__name']


@admin.register(Table)
class TableAdmin(admin.ModelAdmin):
    list_display = ['restaurant', 'table_number', 'capacity', 'shape', 'is_occupied_display', 'is_active']
    list_filter = ['restaurant', 'shape', 'is_active']
    search_fields = ['restaurant__name', 'table_number']
    
    def is_occupied_display(self, obj):
        return obj.bookings.filter(
            status__in=['CONFIRMED', 'PREPARING', 'READY'],
            booking_type='DINE_IN'
        ).exists()
    is_occupied_display.boolean = True
    is_occupied_display.short_description = 'Is Occupied'


@admin.register(DeliveryLocationLog)
class DeliveryLocationLogAdmin(admin.ModelAdmin):
    list_display = ['booking', 'delivery_partner', 'latitude', 'longitude', 'timestamp']
    list_filter = ['delivery_partner', 'timestamp']
    search_fields = ['booking__id', 'delivery_partner__username']
    readonly_fields = ['timestamp']


class ComboItemInline(admin.TabularInline):
    model = ComboItem
    extra = 1


@admin.register(Combo)
class ComboAdmin(admin.ModelAdmin):
    list_display = ['name', 'restaurant', 'service_category_name', 'price', 'is_active']
    list_filter = ['restaurant', 'is_active']
    search_fields = ['name', 'restaurant__name']
    inlines = [ComboItemInline]


@admin.register(MenuCategory)
class MenuCategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'restaurant', 'parent', 'show_subcategories_as_grouped_list', 'order', 'is_active']
    list_filter = ['restaurant', 'is_active', 'show_subcategories_as_grouped_list']
    search_fields = ['name']
    list_editable = ['show_subcategories_as_grouped_list', 'order', 'is_active']
