from django.contrib import admin
from .models import Category, Author, Article, TimelineEvent, UserBookmark, TodayExclusive

@admin.register(TodayExclusive)
class TodayExclusiveAdmin(admin.ModelAdmin):
    list_display = ['date', 'article']
    list_filter = ['date']
    search_fields = ['article__title']
    date_hierarchy = 'date'

@admin.register(UserBookmark)
class UserBookmarkAdmin(admin.ModelAdmin):
    list_display = ['user', 'article', 'created_at']
    list_filter = ['created_at']
    search_fields = ['user__username', 'article__title']

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'slug', 'order', 'is_active']
    prepopulated_fields = {'slug': ('name',)}
    list_editable = ['order', 'is_active']

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ['name', 'email', 'is_external']
    prepopulated_fields = {'slug': ('name',)}

class TimelineEventInline(admin.StackedInline):
    model = TimelineEvent
    extra = 0

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display    = ['title', 'get_categories', 'author', 'status', 'is_featured',
                       'is_breaking', 'published_at', 'view_count']
    list_filter     = ['status', 'categories', 'magazines', 'content_type', 'is_featured',
                       'is_editors_pick', 'is_breaking']
    list_editable   = ['status', 'is_featured', 'is_breaking']
    search_fields   = ['title', 'subtitle', 'excerpt', 'body']
    prepopulated_fields = {'slug': ('title',)}
    readonly_fields = ['view_count', 'created_at', 'updated_at']
    filter_horizontal = ['categories', 'magazines', 'related_products', 'related_videos']
    inlines = [TimelineEventInline]
    fieldsets = (
        ('Content', {'fields': ('title', 'subtitle', 'slug', 'content_type',
                                'author', 'categories', 'body', 'excerpt')}),
        ('Tags & Keywords', {
            'description': '🔍 Add tags and SEO keywords to improve search ranking. Use descriptive tags like "Bangladesh history", "Mughal empire", "naming history". Separate keywords with commas.',
            'fields': ('tags', 'seo_keywords'),
        }),
        ('Media', {'fields': ('featured_image', 'image_caption', 'image_credit',
                              'video_url', 'video_thumbnail')}),
        ('Historical Context', {'fields': ('historical_period', 'historical_date',
                                           'present_connection')}),
        ('Editorial Flags', {'fields': ('status', 'is_featured', 'is_editors_pick',
                                        'is_breaking', 'is_premium', 'published_at')}),
        ('Magazine', {'fields': ('magazines',),
                      'description': 'Tag the magazine issue(s) this story is from — a magazine card appears on the article '
                                     'and the story is listed on the issue page.'}),
        ('Related Content', {'fields': ('related_products', 'related_videos')}),
        ('SEO Meta', {'fields': ('meta_title', 'meta_description', 'og_image', 'canonical_url')}),
        ('Stats', {'fields': ('view_count', 'created_at', 'updated_at'),
                   'classes': ('collapse',)}),
    )

    def get_categories(self, obj):
        return ", ".join([c.name for c in obj.categories.all()])
    get_categories.short_description = 'Categories'
