"""
Modèles pour le paiement des documents (BP, BMC, Pitch).
Un achat par type de document débloque le téléchargement complet pour l'utilisateur.
"""
from django.db import models
from django.conf import settings


class DocumentPrice(models.Model):
    """
    Tarifs des documents (une seule instance en pratique).
    Éditable par l'admin depuis la page Tarifs.
    """
    price_bp = models.PositiveIntegerField(
        default=5000,
        help_text="Prix du Business Plan en FCFA",
    )
    price_bmc = models.PositiveIntegerField(
        default=3000,
        help_text="Prix du BMC en FCFA",
    )
    price_pitch = models.PositiveIntegerField(
        default=3000,
        help_text="Prix du Pitch Deck en FCFA",
    )
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = "Tarifs documents"
        verbose_name_plural = "Tarifs documents"

    def __str__(self):
        return f"BP: {self.price_bp} | BMC: {self.price_bmc} | Pitch: {self.price_pitch} FCFA"


class DocumentPurchase(models.Model):
    """
    Un achat (ou tentative) pour débloquer un type de document.
    Un enregistrement completed pour (user, document_type) débloque ce type.
    """
    DOCUMENT_TYPES = [
        ("bp", "Business Plan"),
        ("bmc", "BMC"),
        ("pitch", "Pitch Deck"),
    ]
    STATUS_CHOICES = [
        ("pending", "En attente"),
        ("completed", "Payé"),
        ("canceled", "Annulé"),
    ]

    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name="document_purchases",
    )
    document_type = models.CharField(max_length=10, choices=DOCUMENT_TYPES)
    amount = models.PositiveIntegerField(help_text="Montant en FCFA")
    ref_command = models.CharField(max_length=255, unique=True, db_index=True)
    paytech_token = models.CharField(max_length=128, blank=True)
    payment_method = models.CharField(max_length=64, blank=True)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="pending")
    paid_at = models.DateTimeField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ["-created_at"]
        indexes = [
            models.Index(fields=["user", "document_type", "status"]),
        ]

    def __str__(self):
        return f"{self.get_document_type_display()} – {self.user.email} – {self.status}"
