from django.contrib import admin
from django.utils.html import format_html
from django.urls import reverse
from .models import JobPosting, Application


@admin.register(JobPosting)
class JobPostingAdmin(admin.ModelAdmin):
    """Admin interface for JobPosting model"""
    
    list_display = ('title', 'posted_by', 'status', 'application_deadline', 'application_count', 'created_at')
    list_filter = ('status', 'employment_type', 'experience_level', 'created_at')
    search_fields = ('title', 'description', 'location', 'posted_by__username')
    readonly_fields = ('created_at', 'updated_at', 'application_count')
    ordering = ('-created_at',)
    
    fieldsets = (
        ('Job Information', {
            'fields': ('title', 'description', 'requirements', 'location')
        }),
        ('Job Details', {
            'fields': ('salary_range', 'employment_type', 'experience_level', 'application_deadline')
        }),
        ('Status & Management', {
            'fields': ('posted_by', 'status')
        }),
        ('Metadata', {
            'fields': ('created_at', 'updated_at', 'application_count'),
            'classes': ('collapse',)
        }),
    )
    
    def application_count(self, obj):
        count = obj.applications.count()
        if count > 0:
            url = reverse('admin:jobs_application_changelist') + f'?job__id__exact={obj.id}'
            return format_html('<a href="{}">{} applications</a>', url, count)
        return '0 applications'
    application_count.short_description = 'Applications'


@admin.register(Application)
class ApplicationAdmin(admin.ModelAdmin):
    """Admin interface for Application model"""
    
    list_display = ('applicant_name', 'job', 'applicant_email', 'is_member', 'submitted_at')
    list_filter = ('submitted_at', 'job__title')
    search_fields = ('applicant_name', 'applicant_email', 'membership_number', 'job__title')
    readonly_fields = ('submitted_at',)
    ordering = ('submitted_at',)  # First come, first served order
    
    fieldsets = (
        ('Applicant Information', {
            'fields': ('applicant_name', 'applicant_email', 'applicant_phone', 'membership_number', 'user')
        }),
        ('Application Details', {
            'fields': ('job', 'cover_letter', 'resume', 'ictaz_certificate', 'additional_documents')
        }),
        ('Management', {
            'fields': ('admin_notes',)
        }),
        ('Metadata', {
            'fields': ('submitted_at',),
            'classes': ('collapse',)
        }),
    )
    
    def is_member(self, obj):
        return obj.is_member
    is_member.short_description = 'ICTAZ Member'
    is_member.boolean = True
    
    actions = ['export_applications_csv']
    
    def export_applications_csv(self, request, queryset):
        """Export selected applications to CSV"""
        import csv
        from django.http import HttpResponse
        
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="applications.csv"'
        
        writer = csv.writer(response)
        writer.writerow([
            'Applicant Name', 'Email', 'Phone', 'Job Title', 
            'Membership Number', 'ICTAZ Member', 'Submitted At'
        ])
        
        for application in queryset:
            writer.writerow([
                application.applicant_name,
                application.applicant_email,
                application.applicant_phone,
                application.job.title,
                application.membership_number or 'N/A',
                'Yes' if application.is_member else 'No',
                application.submitted_at.strftime('%Y-%m-%d %H:%M:%S')
            ])
        
        return response
    export_applications_csv.short_description = 'Export selected applications to CSV'
