from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from .models import Notification, Favorite, Activity, Report


@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    """Notification Admin"""
    list_display = ['id', 'user', 'type', 'title', 'is_read', 'created_at']
    list_filter = ['type', 'is_read', 'created_at']
    search_fields = ['user__username', 'user__email', 'title', 'message']
    raw_id_fields = ['user']
    readonly_fields = ['created_at']
    ordering = ['-created_at']
    
    actions = ['mark_as_read', 'mark_as_unread']
    
    def mark_as_read(self, request, queryset):
        queryset.update(is_read=True)
    mark_as_read.short_description = _('Mark as read')
    
    def mark_as_unread(self, request, queryset):
        queryset.update(is_read=False)
    mark_as_unread.short_description = _('Mark as unread')


@admin.register(Favorite)
class FavoriteAdmin(admin.ModelAdmin):
    """Favorite Admin"""
    list_display = ['user', 'place', 'created_at']
    list_filter = ['created_at']
    search_fields = ['user__username', 'place__name']
    raw_id_fields = ['user', 'place']
    ordering = ['-created_at']


@admin.register(Activity)
class ActivityAdmin(admin.ModelAdmin):
    """Activity Admin"""
    list_display = ['user', 'type', 'place', 'created_at']
    list_filter = ['type', 'created_at']
    search_fields = ['user__username', 'place__name', 'description']
    raw_id_fields = ['user', 'place']
    readonly_fields = ['created_at']
    ordering = ['-created_at']


@admin.register(Report)
class ReportAdmin(admin.ModelAdmin):
    """Report Admin"""
    list_display = ['id', 'reporter', 'report_type', 'status', 'place', 'review', 'created_at']
    list_filter = ['report_type', 'status', 'created_at']
    search_fields = ['reporter__username', 'reason', 'description', 'place__name']
    raw_id_fields = ['reporter', 'place', 'review', 'resolved_by']
    readonly_fields = ['created_at', 'updated_at', 'resolved_at']
    fieldsets = (
        (_('Report Information'), {
            'fields': ('reporter', 'report_type', 'status', 'reason', 'description', 'evidence')
        }),
        (_('Reported Content'), {
            'fields': ('place', 'review')
        }),
        (_('Admin Actions'), {
            'fields': ('admin_notes', 'resolved_by', 'resolved_at'),
            'classes': ('collapse',)
        }),
        (_('Timestamps'), {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    ordering = ['-created_at']
    
    actions = ['mark_as_resolved', 'mark_as_rejected', 'mark_as_under_review']
    
    def mark_as_resolved(self, request, queryset):
        from django.utils import timezone
        count = queryset.update(
            status=Report.ReportStatus.RESOLVED,
            resolved_by=request.user,
            resolved_at=timezone.now()
        )
        self.message_user(request, f'{count} reports marked as resolved')
    mark_as_resolved.short_description = _('Mark selected reports as resolved')
    
    def mark_as_rejected(self, request, queryset):
        from django.utils import timezone
        count = queryset.update(
            status=Report.ReportStatus.REJECTED,
            resolved_by=request.user,
            resolved_at=timezone.now()
        )
        self.message_user(request, f'{count} reports marked as rejected')
    mark_as_rejected.short_description = _('Mark selected reports as rejected')
    
    def mark_as_under_review(self, request, queryset):
        count = queryset.update(status=Report.ReportStatus.UNDER_REVIEW)
        self.message_user(request, f'{count} reports marked as under review')
    mark_as_under_review.short_description = _('Mark selected reports as under review')
