import csv
from django.contrib import admin
from django.http import HttpResponse
from django.utils.html import format_html
from .models import ContactEnquiry


# ── Actions ───────────────────────────────────────────────────────────────────
def export_enquiries_csv(modeladmin, request, queryset):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="ft_enquiries.csv"'
    writer = csv.writer(response)
    writer.writerow([
        'Name', 'Email', 'Phone', 'Company', 'Category', 'Subject',
        'Message', 'Ticket #', 'reCAPTCHA Score', 'IP', 'Created'
    ])
    for e in queryset:
        writer.writerow([
            e.name, e.email, e.phone, e.company,
            e.get_category_display(), e.subject, e.message,
            e.ticket.ticket_number if e.ticket else '',
            e.recaptcha_score or '', e.ip_address or '',
            e.created_at.strftime('%Y-%m-%d %H:%M')
        ])
    return response
export_enquiries_csv.short_description = '📥 Export to CSV'


def create_ticket_from_enquiry(modeladmin, request, queryset):
    """Auto-create a ticket for enquiries that don't have one yet."""
    from apps.tickets.models import Ticket
    created = 0
    for e in queryset.filter(ticket__isnull=True):
        ticket = Ticket.objects.create(
            tenant=e.tenant,
            source=Ticket.SOURCE_CONTACT,
            sender_name=e.name,
            sender_email=e.email,
            sender_phone=e.phone,
            sender_company=e.company,
            subject=e.subject,
            category=e.category,
            message=e.message,
        )
        e.ticket = ticket
        e.save(update_fields=['ticket'])
        created += 1
    modeladmin.message_user(request, f'✅ Created {created} ticket(s).')
create_ticket_from_enquiry.short_description = '🎫 Create Ticket for Selected'


# ── Contact Enquiry Admin ─────────────────────────────────────────────────────
@admin.register(ContactEnquiry)
class ContactEnquiryAdmin(admin.ModelAdmin):
    list_display = [
        'name', 'email', 'phone', 'company',
        'category_badge', 'subject_short', 'ticket_link',
        'recaptcha_score', 'created_at'
    ]
    list_filter   = ['category', 'created_at', 'tenant']
    search_fields = ['name', 'email', 'company', 'subject', 'message']
    readonly_fields = ['recaptcha_score', 'ip_address', 'ticket', 'created_at']
    actions       = [export_enquiries_csv, create_ticket_from_enquiry]
    date_hierarchy = 'created_at'
    list_per_page  = 25
    save_on_top    = True

    fieldsets = (
        ('Sender', {
            'fields': ('name', 'email', 'phone', 'company', 'tenant')
        }),
        ('Enquiry', {
            'fields': ('category', 'subject', 'message')
        }),
        ('System', {
            'fields': ('ticket', 'recaptcha_score', 'ip_address', 'created_at'),
            'classes': ('collapse',)
        }),
    )

    def category_badge(self, obj):
        colours = {
            'general':     '#555',
            'sales':       '#1a73e8',
            'support':     '#e65100',
            'partnership': '#6a1b9a',
            'careers':     '#2e7d32',
        }
        colour = colours.get(obj.category, '#555')
        return format_html(
            '<span style="background:{};color:#fff;padding:2px 10px;border-radius:12px;font-size:11px;font-weight:600">{}</span>',
            colour, obj.get_category_display()
        )
    category_badge.short_description = 'Category'
    category_badge.admin_order_field = 'category'

    def subject_short(self, obj):
        return obj.subject[:60] + '…' if len(obj.subject) > 60 else obj.subject
    subject_short.short_description = 'Subject'

    def ticket_link(self, obj):
        if obj.ticket:
            url = f'/admin/tickets/ticket/{obj.ticket.pk}/change/'
            return format_html(
                '<a href="{}" style="color:#1a73e8;font-weight:600">🎫 {}</a>',
                url, obj.ticket.ticket_number
            )
        return format_html('<span style="color:#bbb">— no ticket</span>')
    ticket_link.short_description = 'Ticket'
