from django.contrib import admin
from django.utils.html import format_html
from .models import SavedPost, SavedUser, SavedCategory


@admin.register(SavedPost)
class SavedPostAdmin(admin.ModelAdmin):
    list_display = ['id', 'user_display', 'post_preview', 'created_at']
    list_filter = ['created_at']
    search_fields = ['user__username', 'post__content']
    raw_id_fields = ['user', 'post']
    date_hierarchy = 'created_at'
    ordering = ['-created_at']
    list_select_related = ['user', 'post']

    def user_display(self, obj):
        return obj.user.username
    user_display.short_description = 'User'
    user_display.admin_order_field = 'user__username'

    def post_preview(self, obj):
        preview = obj.post.content[:40] + '...' if len(obj.post.content) > 40 else obj.post.content
        return preview or '(No content)'
    post_preview.short_description = 'Post'


@admin.register(SavedUser)
class SavedUserAdmin(admin.ModelAdmin):
    list_display = ['id', 'user_display', 'saved_user_display', 'created_at']
    list_filter = ['created_at']
    search_fields = ['user__username', 'saved_user__username']
    raw_id_fields = ['user', 'saved_user']
    date_hierarchy = 'created_at'
    ordering = ['-created_at']
    list_select_related = ['user', 'saved_user']

    def user_display(self, obj):
        return obj.user.username
    user_display.short_description = 'User'
    user_display.admin_order_field = 'user__username'

    def saved_user_display(self, obj):
        return obj.saved_user.username
    saved_user_display.short_description = 'Saved Profile'
    saved_user_display.admin_order_field = 'saved_user__username'


@admin.register(SavedCategory)
class SavedCategoryAdmin(admin.ModelAdmin):
    list_display = ['id', 'user_display', 'category_display', 'created_at']
    list_filter = ['created_at', 'category']
    search_fields = ['user__username', 'category__title']
    raw_id_fields = ['user', 'category']
    date_hierarchy = 'created_at'
    ordering = ['-created_at']
    list_select_related = ['user', 'category']

    def user_display(self, obj):
        return obj.user.username
    user_display.short_description = 'User'
    user_display.admin_order_field = 'user__username'

    def category_display(self, obj):
        return obj.category.title
    category_display.short_description = 'Category'
    category_display.admin_order_field = 'category__title'
