from django.db import models
from django.contrib.auth.models import User
import secrets

class Source(models.Model):
    name = models.CharField(max_length=255)
    owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sources')
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

class ApiKey(models.Model):
    key = models.CharField(max_length=100, unique=True, editable=False)
    source = models.ForeignKey(Source, on_delete=models.CASCADE, related_name='api_keys')
    label = models.CharField(max_length=100, default="Default")
    created_at = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)

    def save(self, *args, **kwargs):
        if not self.key:
            self.key = f"fhk_live_{secrets.token_urlsafe(24)}"
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.label} ({self.source.name})"

class Submission(models.Model):
    STATUS_CHOICES = [
        ('new', 'New'),
        ('read', 'Read'),
        ('archived', 'Archived'),
    ]

    source = models.ForeignKey(Source, on_delete=models.CASCADE, related_name='submissions')
    medium = models.CharField(max_length=255, blank=True, null=True)
    context = models.JSONField()
    created_at = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='new')
    remark = models.TextField(blank=True, null=True)

    def __str__(self):
        return f"Submission from {self.source.name} at {self.created_at}"

class SubmissionFile(models.Model):
    submission = models.ForeignKey(Submission, on_delete=models.CASCADE, related_name='files')
    file = models.FileField(upload_to='submissions/%Y/%m/%d/')
    filename = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.filename
