from django.db import models
from django.urls import reverse


class DownloadableForm(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    file = models.FileField(upload_to='forms/files/')
    cover = models.ImageField(upload_to='forms/covers/', blank=True, null=True)
    require_email = models.BooleanField(default=True,
                                        help_text='Capture email before download (gates lead)')
    is_active = models.BooleanField(default=True)
    download_count = models.PositiveIntegerField(default=0)
    order = models.PositiveIntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['order', '-created_at']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('forms:detail', kwargs={'pk': self.pk})


class FormDownload(models.Model):
    """Track who downloaded what — feeds into leads."""
    form = models.ForeignKey(DownloadableForm, on_delete=models.CASCADE, related_name='downloads')
    name = models.CharField(max_length=120, blank=True)
    email = models.EmailField(blank=True)
    phone = models.CharField(max_length=30, blank=True)
    ip_address = models.GenericIPAddressField(blank=True, null=True)
    downloaded_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-downloaded_at']

    def __str__(self):
        return f"{self.email or self.name or 'anonymous'} → {self.form.title}"
