from django.db import models
from django.conf import settings


class MentoringThread(models.Model):
    """Un fil de mentorat par type de document (BP, BMC, Pitch) pour un étudiant."""
    DOC_TYPE_CHOICES = [
        ('BP', 'Business Plan'),
        ('BMC', 'Business Model Canvas'),
        ('PITCH', 'Pitch Deck'),
    ]
    STATUS_CHOICES = [
        ('in_progress', 'En cours'),
        ('closed', 'Clôturé'),
    ]

    student = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='mentoring_threads',
    )
    mentor = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='mentoring_threads_mentor',
        null=True,
        blank=True,
    )
    document_type = models.CharField(max_length=10, choices=DOC_TYPE_CHOICES)
    document_id = models.PositiveIntegerField(null=True, blank=True, help_text="ID du BP, BMC ou Pitch")
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='in_progress')
    grade = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True, verbose_name="Note")
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-updated_at']
        unique_together = [['student', 'document_type']]

    def __str__(self):
        return f"Mentorat {self.get_document_type_display()} – {self.student.email}"


class MentoringMessage(models.Model):
    """Un message dans un fil de mentorat. Le mentor peut autoriser ou non la réponse de l'étudiant."""
    thread = models.ForeignKey(
        MentoringThread,
        on_delete=models.CASCADE,
        related_name='messages',
    )
    sender = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='mentoring_messages',
    )
    content = models.TextField()
    is_from_mentor = models.BooleanField(default=False)
    student_can_reply = models.BooleanField(
        default=False,
        help_text="Si True (et message du mentor), l'étudiant peut répondre après ce message.",
    )
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return f"{'Mentor' if self.is_from_mentor else 'Étudiant'} – {self.created_at}"


class AdminMentorThread(models.Model):
    """Un fil de discussion entre un admin et un mentor (un par couple admin/mentor)."""
    admin_user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='admin_mentor_threads_as_admin',
    )
    mentor = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='admin_mentor_threads_as_mentor',
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-updated_at']
        unique_together = [['admin_user', 'mentor']]

    def __str__(self):
        return f"Admin–Mentor {self.mentor.email}"


class AdminMentorMessage(models.Model):
    """Message dans une discussion admin–mentor."""
    thread = models.ForeignKey(
        AdminMentorThread,
        on_delete=models.CASCADE,
        related_name='messages',
    )
    sender = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='admin_mentor_messages',
    )
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return f"AdminMentorMsg {self.id} – {self.created_at}"
