import secrets
import string
import uuid

from django.db import models

from management.models.gruppo_driver import GruppoDriver
from management.models.plan_archivio import PlanArchivio
from management.models.pratica import Pratica

class Flusso(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=140, null=True, blank=True)
    descrizione = models.TextField(null=True, blank=True)
    note_attivita = models.TextField(null=True, blank=True)
    annotazioni = models.TextField(null=True, blank=True)
    approfondimenti = models.TextField(null=True, blank=True)
    group = models.ForeignKey(GruppoDriver, on_delete=models.CASCADE) # gruppo
    codice_attivita = models.IntegerField(default=0)    # ordinamento nel gruppo
    stato = models.IntegerField(default=0) # stato attivita
    allegati = models.TextField(null=True, blank=True)
    pratica = models.ForeignKey(Pratica, on_delete=models.CASCADE)
    plan = models.ForeignKey(PlanArchivio, on_delete=models.CASCADE)
    data_ora_modifica = models.DateTimeField(auto_now=True)
    data_ora_creazione = models.DateTimeField(auto_now_add=True)
    random_code = models.CharField(max_length=50, blank=True)

    class Meta:
        db_table = "Flussi"

    def save(self, *args, **kwargs):
        if not self.random_code:
            while True:
                code = self.generate_code()
                if not Flusso.objects.filter(random_code=code).exists():
                    self.random_code = code
                    break
        super().save(*args, **kwargs)

    def generate_code(self, length=12):
        chars = string.ascii_uppercase + string.digits
        return ''.join(secrets.choice(chars) for _ in range(length))


class FlussoAttachment(models.Model):
    flusso = models.ForeignKey(Flusso, on_delete=models.CASCADE, related_name='attachments')
    nome = models.CharField(max_length=200)
    location = models.CharField(max_length=500)  # Percorso completo del file
    data_ora_modifica = models.DateTimeField(auto_now=True)
    data_ora_creazione = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = 'Flusso_attachments'
        indexes = [
            models.Index(fields=['flusso']),
        ]
    
    def __str__(self):
        return f"{self.nome} - Flusso {self.flusso_id}"