from django.db import models
from django.db.models import Q

from .pam import PAM

from .sous_vivier import SousVivier


class StatutCalculChoices(models.TextChoices):
    AUCUN                       = 'AUCUN',            'aucun'
    EN_ATTENTE                  = 'EN_ATTENTE',       'en attente'
    EN_ATTENTE_ARRET            = 'EN_ATTENTE_ARRET',  "en attente d'arrêt"
    EN_COURS                    = 'EN_COURS',         'en cours'
    TERMINE                     = 'TERMINE',          'terminé'
    ERREUR_ADMINISTRE           = 'ERREUR_ADMINISTRE','terminé en erreur administré',
    ERREUR_POSTE                = 'ERREUR_POSTE',     'terminé en erreur poste',
    ERREUR                      = 'ERREUR',           'terminé en erreur'
    TERMINE_DE_FORCE            = 'TERMINE_DE_FORCE', 'terminé de force'


class Calcul(models.Model):
    """
    Modèle pour le suivi des calculs
    On y intègre également le statut du calcul
    """
    id = models.CharField(max_length=100, primary_key=True, default="")
    sous_vivier = models.ForeignKey(SousVivier, on_delete=models.CASCADE, verbose_name="Sous-vivier")
    pam = models.ForeignKey(PAM, on_delete=models.CASCADE, null=True, blank=True)
    ca_date_debut = models.DateTimeField('Date de début', null=True, blank=True)
    ca_date_fin = models.DateTimeField('Date de fin', null=True, blank=True)
    ca_statut = models.CharField('Statut', max_length=40, choices=StatutCalculChoices.choices)
    ca_statut_pourcentage = models.FloatField('Avancement (%)',default=0)

    class Meta:
        constraints = [
            models.CheckConstraint(
                name='%(app_label)s_%(class)s_ca_statut_valid',
                check=models.Q(ca_statut__in=StatutCalculChoices.values)
            ),
            models.CheckConstraint(
                name='%(app_label)s_%(class)s_ca_statut_pourcentage_valid',
                check=Q(ca_statut_pourcentage__gte=0.0) & Q(ca_statut_pourcentage__lte=100.0)
            ),
        ]
