from django.contrib import admin
from .models import ContactInfo, ContactMessage, UniversityContact, NewsletterSubscriber
from traduction.admin_mixins import TranslatableAdminMixin


@admin.register(ContactInfo)
class ContactInfoAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['department_name', 'department_type', 'email', 'phone', 'order', 'is_active']
    list_editable = ['order', 'is_active']
    list_filter = ['department_type', 'is_active']

    fieldsets = (
        ('Departement', {
            'fields': ('department_name', 'department_type')
        }),
        ('Contact', {
            'fields': ('email', 'secondary_email', 'phone', 'fax')
        }),
        ('Adresse', {
            'fields': ('address_line1', 'address_line2', 'city', 'postal_code', 'country'),
            'classes': ('collapse',)
        }),
        ('Informations', {
            'fields': ('office_hours', 'order', 'is_active')
        }),
    )


@admin.register(ContactMessage)
class ContactMessageAdmin(admin.ModelAdmin):
    list_display = ['full_name', 'email', 'subject_category', 'subject', 'submission_date', 'status']
    list_filter = ['status', 'subject_category', 'submission_date']
    search_fields = ['first_name', 'last_name', 'email', 'subject', 'message']
    readonly_fields = ['first_name', 'last_name', 'email', 'phone', 'subject_category',
                       'subject', 'message', 'submission_date', 'ip_address', 'user_agent']
    date_hierarchy = 'submission_date'

    fieldsets = (
        ('Expediteur', {
            'fields': ('first_name', 'last_name', 'email', 'phone')
        }),
        ('Message', {
            'fields': ('subject_category', 'subject', 'message', 'submission_date')
        }),
        ('Traitement', {
            'fields': ('status', 'assigned_to', 'response_text', 'response_date')
        }),
        ('Informations techniques', {
            'fields': ('ip_address', 'user_agent'),
            'classes': ('collapse',)
        }),
    )

    def has_add_permission(self, request):
        return False


@admin.register(UniversityContact)
class UniversityContactAdmin(admin.ModelAdmin):
    list_display = ['contact_person', 'university', 'email', 'is_primary', 'order']
    list_filter = ['university', 'is_primary']
    search_fields = ['contact_person', 'email']
    list_editable = ['is_primary', 'order']


@admin.register(NewsletterSubscriber)
class NewsletterSubscriberAdmin(admin.ModelAdmin):
    list_display = ['email', 'first_name', 'last_name', 'subscription_date', 'is_active', 'is_verified']
    list_filter = ['is_active', 'is_verified', 'subscription_date']
    search_fields = ['email', 'first_name', 'last_name']
    readonly_fields = ['subscription_date', 'verification_token', 'unsubscribe_token', 'ip_address']
    date_hierarchy = 'subscription_date'

    actions = ['activate_subscribers', 'deactivate_subscribers']

    def activate_subscribers(self, request, queryset):
        queryset.update(is_active=True)
    activate_subscribers.short_description = "Activer les abonnes selectionnes"

    def deactivate_subscribers(self, request, queryset):
        queryset.update(is_active=False)
    deactivate_subscribers.short_description = "Desactiver les abonnes selectionnes"
