from django.contrib import admin
from .models import (
    User, City, Category, Place, SocialMediaLink,
    PlaceImage, Booking, FavoritePlace, EmergencyNumber, ContactUs, Advertisement
)

# SocialMediaLink Inline
class SocialMediaLinkInline(admin.TabularInline):
    model = SocialMediaLink
    extra = 1

# PlaceImage Inline
class PlaceImageInline(admin.TabularInline):
    model = PlaceImage
    extra = 1

# Place Inline for Category
class PlaceInlineForCategory(admin.TabularInline):
    model = Place
    extra = 1
    show_change_link = True

# Place Inline for City
class PlaceInlineForCity(admin.TabularInline):
    model = Place
    extra = 1
    show_change_link = True

# FavoritePlace Inline for User
class FavoritePlaceInline(admin.TabularInline):
    model = FavoritePlace
    extra = 1
    show_change_link = True

# Place Admin
class PlaceAdmin(admin.ModelAdmin):
    inlines = [SocialMediaLinkInline, PlaceImageInline]
    list_display = ('name_en', 'city', 'category', 'user', 'rating', 'created_at', 'updated_at')
    search_fields = ('name_en', 'name_ar', 'name_ku', 'description_ar', 'description_en', 'description_ku', 'city__name_en', 'city__name_ar', 'city__name_ku', 'category__name_en', 'category__name_ar', 'category__name_ku')
    list_filter = ('city', 'category', 'rating', 'created_at', 'updated_at')

# City Admin
class CityAdmin(admin.ModelAdmin):
    inlines = [PlaceInlineForCity]
    list_display = ('name_en', 'created_at', 'updated_at')
    search_fields = ('name_en', 'name_ar', 'name_ku')
    list_filter = ('created_at', 'updated_at')

# Category Admin
class CategoryAdmin(admin.ModelAdmin):
    inlines = [PlaceInlineForCategory]
    list_display = ('name_en', 'created_at', 'updated_at')
    search_fields = ('name_en', 'name_ar', 'name_ku')
    list_filter = ('created_at', 'updated_at')

# User Admin
class UserAdmin(admin.ModelAdmin):
    inlines = [FavoritePlaceInline]
    list_display = ('username', 'email', 'phone_number', 'preferred_language', 'is_staff', 'created_at', 'updated_at')
    search_fields = ('username', 'email', 'phone_number', 'city__name_en', 'city__name_ar', 'city__name_ku')
    list_filter = ('preferred_language', 'is_staff', 'created_at', 'updated_at')

# Advertisement Admin
class AdvertisementAdmin(admin.ModelAdmin):
    list_display = ('title_ar', 'user', 'is_active', 'expiry_date', 'created_at', 'updated_at')
    search_fields = ('title_ar', 'title_en', 'title_ku', 'user__username', 'cities__name_en', 'cities__name_ar', 'cities__name_ku')
    list_filter = ('is_active', 'expiry_date', 'cities')
    autocomplete_fields = ['user']
    fieldsets = (
        (None, {
            'fields': ('user', 'title_ar', 'title_en', 'title_ku', 'link', 'is_active')
        }),
        ('Dates', {
            'fields': ('expiry_date', 'created_at', 'updated_at'),
        }),
        ('Cities', {
            'fields': ('cities',)
        }),
        ('Media', {
            'fields': ('image',)
        }),
    )
    readonly_fields = ('created_at', 'updated_at')

# Booking Admin
class BookingAdmin(admin.ModelAdmin):
    list_display = ('place', 'user', 'subject', 'created_at', 'updated_at')
    search_fields = ('place__name_en', 'place__name_ar', 'place__name_ku', 'user__username', 'subject')
    list_filter = ('created_at', 'updated_at')

# FavoritePlace Admin
class FavoritePlaceAdmin(admin.ModelAdmin):
    list_display = ('user', 'place', 'created_at', 'updated_at')
    search_fields = ('user__username', 'place__name_en', 'place__name_ar', 'place__name_ku')
    list_filter = ('created_at', 'updated_at')

# EmergencyNumber Admin
class EmergencyNumberAdmin(admin.ModelAdmin):
    list_display = ('title_ar', 'phone_number', 'created_at', 'updated_at')
    search_fields = ('title_ar', 'title_en', 'title_ku', 'phone_number')
    list_filter = ('created_at', 'updated_at')

# ContactUs Admin
class ContactUsAdmin(admin.ModelAdmin):
    list_display = ('user_name', 'phone_number', 'email', 'is_read', 'created_at', 'updated_at')
    search_fields = ('user_name', 'phone_number', 'email', 'message')
    list_filter = ('is_read', 'created_at', 'updated_at')

# Registering models in admin site
admin.site.register(User, UserAdmin)
admin.site.register(City, CityAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Place, PlaceAdmin)
admin.site.register(SocialMediaLink)
admin.site.register(PlaceImage)
admin.site.register(Booking, BookingAdmin)
admin.site.register(FavoritePlace, FavoritePlaceAdmin)
admin.site.register(EmergencyNumber, EmergencyNumberAdmin)
admin.site.register(ContactUs, ContactUsAdmin)
admin.site.register(Advertisement, AdvertisementAdmin)
