from django.shortcuts import render, redirect, get_object_or_404
from django.http import FileResponse, Http404
from django.contrib import messages
from django.db.models import F
from .models import DownloadableForm, FormDownload
from apps.leads.models import Lead


def form_list(request):
    forms = DownloadableForm.objects.filter(is_active=True)
    return render(request, 'forms/list.html', {'forms': forms})


def form_detail(request, pk):
    form_obj = get_object_or_404(DownloadableForm, pk=pk, is_active=True)

    if request.method == 'POST':
        name = request.POST.get('name', '').strip()
        email = request.POST.get('email', '').strip()
        phone = request.POST.get('phone', '').strip()

        if form_obj.require_email and not email:
            messages.error(request, 'Email is required to download this form.')
            return render(request, 'forms/detail.html', {'form': form_obj})

        ip = request.META.get('HTTP_X_FORWARDED_FOR', '').split(',')[0].strip() or request.META.get('REMOTE_ADDR')
        FormDownload.objects.create(form=form_obj, name=name, email=email, phone=phone, ip_address=ip or None)
        DownloadableForm.objects.filter(pk=form_obj.pk).update(download_count=F('download_count') + 1)

        # convert to lead
        if email or phone:
            Lead.objects.create(
                name=name or 'Form Download',
                email=email,
                phone=phone,
                interested_in=f"Downloaded: {form_obj.title}",
                source='other',
                ip_address=ip or None,
            )

        try:
            return FileResponse(form_obj.file.open('rb'), as_attachment=True,
                                filename=form_obj.file.name.split('/')[-1])
        except FileNotFoundError:
            raise Http404('File missing')

    return render(request, 'forms/detail.html', {'form': form_obj})
