# -*- coding: utf-8 -*-
"""
Pages Admin Configuration

This module configures the Django admin interface for the pages application.
Provides comprehensive admin functionality for page management.

Author: Focus Development Team
Version: 1.0.0
Created: 2025-01-01
"""

from django.contrib import admin
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from django.utils.safestring import mark_safe

from .models import Page, PageStatus, PageVisibility


@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
    """
    Admin configuration for Page model.
    
    Provides comprehensive management interface for pages
    with filtering, searching, and bulk actions.
    """
    
    list_display = [
        'title',
        'author',
        'status_badge',
        'visibility_badge',
        'is_featured',
        'view_count',
        'created_at',
        'published_at',
        'actions_column',
    ]
    
    list_filter = [
        'status',
        'visibility',
        'is_featured',
        'created_at',
        'published_at',
        'author',
    ]
    
    search_fields = [
        'title',
        'slug',
        'content',
        'excerpt',
        'tags',
        'author__username',
        'author__email',
    ]
    
    prepopulated_fields = {
        'slug': ('title',)
    }
    
    readonly_fields = [
        'view_count',
        'created_at',
        'updated_at',
        'published_at',
    ]
    
    fieldsets = (
        (_('Basic Information'), {
            'fields': (
                'title',
                'slug',
                'author',
                'excerpt',
            )
        }),
        (_('Content'), {
            'fields': (
                'content',
                'featured_image',
            )
        }),
        (_('Settings'), {
            'fields': (
                'status',
                'visibility',
                'is_featured',
                'tags',
            )
        }),
        (_('SEO & Metadata'), {
            'fields': (
                'meta_title',
                'meta_description',
                'meta_keywords',
            ),
            'classes': ('collapse',)
        }),
        (_('Customization'), {
            'fields': (
                'custom_css',
            ),
            'classes': ('collapse',)
        }),
        (_('Statistics'), {
            'fields': (
                'view_count',
                'created_at',
                'updated_at',
                'published_at',
            ),
            'classes': ('collapse',)
        }),
    )
    
    list_per_page = 25
    date_hierarchy = 'created_at'
    ordering = ['-created_at']
    
    actions = [
        'make_published',
        'make_draft',
        'make_archived',
        'make_featured',
        'remove_featured',
        'make_public',
        'make_private',
    ]
    
    def status_badge(self, obj):
        """Display status as a colored badge."""
        colors = {
            PageStatus.DRAFT: '#6c757d',
            PageStatus.PUBLISHED: '#28a745',
            PageStatus.ARCHIVED: '#dc3545',
        }
        color = colors.get(obj.status, '#6c757d')
        return format_html(
            '<span style="background-color: {}; color: white; padding: 2px 8px; '
            'border-radius: 3px; font-size: 11px; font-weight: bold;">{}</span>',
            color,
            obj.get_status_display()
        )
    status_badge.short_description = _('Status')
    
    def visibility_badge(self, obj):
        """Display visibility as a colored badge."""
        colors = {
            PageVisibility.PRIVATE: '#dc3545',
            PageVisibility.PUBLIC: '#28a745',
            PageVisibility.UNLISTED: '#ffc107',
        }
        color = colors.get(obj.visibility, '#6c757d')
        return format_html(
            '<span style="background-color: {}; color: white; padding: 2px 8px; '
            'border-radius: 3px; font-size: 11px; font-weight: bold;">{}</span>',
            color,
            obj.get_visibility_display()
        )
    visibility_badge.short_description = _('Visibility')
    
    def actions_column(self, obj):
        """Display action buttons for each page."""
        view_url = obj.get_absolute_url()
        edit_url = reverse('admin:pages_page_change', args=[obj.pk])
        
        return format_html(
            '<a href="{}" target="_blank" class="button" style="margin-right: 5px;">'
            '{}</a>'
            '<a href="{}" class="button">{}</a>',
            view_url, _('View'),
            edit_url, _('Edit')
        )
    actions_column.short_description = _('Actions')
    
    def get_queryset(self, request):
        """Optimize queryset with select_related."""
        return super().get_queryset(request).select_related('author')
    
    # Bulk actions
    def make_published(self, request, queryset):
        """Bulk action to publish pages."""
        updated = queryset.update(status=PageStatus.PUBLISHED)
        self.message_user(
            request,
            _('Successfully published {} pages.').format(updated)
        )
    make_published.short_description = _('Mark selected pages as published')
    
    def make_draft(self, request, queryset):
        """Bulk action to make pages draft."""
        updated = queryset.update(status=PageStatus.DRAFT)
        self.message_user(
            request,
            _('Successfully marked {} pages as draft.').format(updated)
        )
    make_draft.short_description = _('Mark selected pages as draft')
    
    def make_archived(self, request, queryset):
        """Bulk action to archive pages."""
        updated = queryset.update(status=PageStatus.ARCHIVED)
        self.message_user(
            request,
            _('Successfully archived {} pages.').format(updated)
        )
    make_archived.short_description = _('Mark selected pages as archived')
    
    def make_featured(self, request, queryset):
        """Bulk action to feature pages."""
        updated = queryset.update(is_featured=True)
        self.message_user(
            request,
            _('Successfully featured {} pages.').format(updated)
        )
    make_featured.short_description = _('Mark selected pages as featured')
    
    def remove_featured(self, request, queryset):
        """Bulk action to remove featured status."""
        updated = queryset.update(is_featured=False)
        self.message_user(
            request,
            _('Successfully removed featured status from {} pages.').format(updated)
        )
    remove_featured.short_description = _('Remove featured status from selected pages')
    
    def make_public(self, request, queryset):
        """Bulk action to make pages public."""
        updated = queryset.update(visibility=PageVisibility.PUBLIC)
        self.message_user(
            request,
            _('Successfully made {} pages public.').format(updated)
        )
    make_public.short_description = _('Make selected pages public')
    
    def make_private(self, request, queryset):
        """Bulk action to make pages private."""
        updated = queryset.update(visibility=PageVisibility.PRIVATE)
        self.message_user(
            request,
            _('Successfully made {} pages private.').format(updated)
        )
    make_private.short_description = _('Make selected pages private')
