from django.db import models
from django.conf import settings
from django.core.validators import MinValueValidator, MaxValueValidator

class MarketSurvey(models.Model):
    """
    Représente l'étude de marché globale d'un entrepreneur (User).
    C'est ici qu'on vérifiera si le quota de 100 est atteint.
    """
    entrepreneur = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='market_study')
    created_at = models.DateTimeField(auto_now_add=True)
    is_validated = models.BooleanField(default=False, help_text="Passe à Vrai si > 100 réponses")

    def __str__(self):
        return f"Étude de {self.entrepreneur.email}"

    @property
    def response_count(self):
        return self.responses.count()

class SurveyResponse(models.Model):
    """
    Chaque ligne correspond à UNE personne interrogée.
    """
    # --- CHOIX (ENUMS) ---
    AGE_CHOICES = [
        ('UNDER_18', 'Moins de 18 ans'),
        ('18_24', '18-24 ans'),
        ('25_34', '25-34 ans'),
        ('35_44', '35-44 ans'),
        ('45_PLUS', '45 ans et plus'),
    ]
    
    GENDER_CHOICES = [
        ('MALE', 'Masculin'),
        ('FEMALE', 'Féminin'),
        ('OTHER', 'Autre'),
        ('PREFER_NOT_SAY', 'Préfère ne pas dire'),
    ]

    FREQUENCY_CHOICES = [
        ('DAILY', 'Quotidiennement'),
        ('WEEKLY', 'Hebdomadairement'),
        ('MONTHLY', 'Mensuellement'),
        ('RARELY', 'Rarement'),
    ]

    PRICE_PERCEPTION_CHOICES = [
        ('VERY_HIGH', 'Très élevés'),
        ('HIGH', 'Élevés'),
        ('MEDIUM', 'Moyens'),
        ('AFFORDABLE', 'Abordables'),
        ('VERY_AFFORDABLE', 'Très abordables'),
    ]

    RATING_CHOICES = [
        (1, '1 - Pas du tout'),
        (2, '2 - Peu'),
        (3, '3 - Moyennement'),
        (4, '4 - Beaucoup'),
        (5, '5 - Énormément'),
    ]

    SERVICE_RATING_CHOICES = [
        ('EXCELLENT', 'Excellent'),
        ('GOOD', 'Bon'),
        ('AVERAGE', 'Moyen'),
        ('BAD', 'Mauvais'),
        ('VERY_BAD', 'Très mauvais'),
    ]

    # Liaison avec l'étude de l'entrepreneur
    study = models.ForeignKey(MarketSurvey, on_delete=models.CASCADE, related_name='responses')
    created_at = models.DateTimeField(auto_now_add=True)

    # --- 1. INFORMATIONS GÉNÉRALES ---
    respondent_name = models.CharField(max_length=100, blank=True, null=True, verbose_name="Nom (Facultatif)")
    age_range = models.CharField(max_length=20, choices=AGE_CHOICES, verbose_name="Tranche d'âge")
    gender = models.CharField(max_length=20, choices=GENDER_CHOICES, verbose_name="Genre")
    location = models.CharField(max_length=100, verbose_name="Localisation (Ville, Région)")

    # --- 2. COMPORTEMENTS D'ACHAT ---
    purchase_frequency = models.CharField(max_length=20, choices=FREQUENCY_CHOICES, verbose_name="Fréquence d'achat")
    
    # Pour les cases à cocher multiples, on stocke en format texte
    preferred_channels = models.TextField(verbose_name="Lieux d'achat préférés")
    decision_factors = models.TextField(verbose_name="Facteurs d'influence")

    # --- 3. ATTENTES ET BESOINS ---
    desired_features = models.TextField(verbose_name="Caractéristiques recherchées")
    pain_points = models.TextField(verbose_name="Problèmes ou besoins à résoudre")
    interest_level = models.IntegerField(choices=RATING_CHOICES, verbose_name="Niveau d'intérêt (1-5)")

    # --- 4. CONCURRENCE ET MARCHÉ ---
    current_competitors = models.TextField(verbose_name="Marques/Entreprises utilisées actuellement")
    competitor_feedback = models.TextField(verbose_name="Ce qui plaît ou déplaît chez les concurrents")
    general_price_perception = models.CharField(max_length=20, choices=PRICE_PERCEPTION_CHOICES, verbose_name="Perception des prix")

    # --- 5. ANALYSE SPÉCIFIQUE CONCURRENT (Détails) ---
    competitor_product_types = models.TextField(verbose_name="Types de produits concurrents", blank=True)
    competitor_avg_price_perception = models.CharField(max_length=20, choices=PRICE_PERCEPTION_CHOICES, verbose_name="Prix moyens concurrents", blank=True)
    competitor_marketing_channels = models.TextField(verbose_name="Canaux marketing concurrents", blank=True)
    competitor_service_rating = models.CharField(max_length=20, choices=SERVICE_RATING_CHOICES, verbose_name="Note Service Client Concurrent", blank=True)
    competitor_service_strengths_weaknesses = models.TextField(verbose_name="Forces/Faiblesses Service Client", blank=True)

    # --- 6. CONCLUSION ---
    interested_in_future = models.BooleanField(default=False, verbose_name="Intéressé par futur produit ?")
    additional_comments = models.TextField(blank=True, null=True, verbose_name="Commentaires supplémentaires")

    def __str__(self):
        return f"Réponse de {self.respondent_name or 'Anonyme'} - {self.location}"