from django.db import models
from attendance.models import RegisteredUser, Event
from django.utils import timezone

class TShirtType(models.Model):
    name = models.CharField(max_length=50)  # e.g., 'Regular', 'Slim Fit'
    description = models.TextField(blank=True, null=True)
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.name
    
    class Meta:
        ordering = ['name']

class TShirtSize(models.Model):
    name = models.CharField(max_length=20)  # e.g., 'Small', 'Medium', 'Large', 'XL', 'XXL'
    code = models.CharField(max_length=5)  # e.g., 'S', 'M', 'L', 'XL', 'XXL'
    order = models.PositiveIntegerField(default=0, help_text='Order in which sizes should be displayed (smaller numbers first)')
    description = models.TextField(blank=True, null=True)
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.name
    
    class Meta:
        ordering = ['order', 'name']

class ApparelRequest(models.Model):
    registered_user = models.ForeignKey(
        RegisteredUser, 
        on_delete=models.CASCADE, 
        related_name='apparel_requests'
    )
    # Store event name from registered user
    event_name = models.CharField(max_length=255)
    registration_code = models.CharField(max_length=20)
    tshirt_type = models.ForeignKey(TShirtType, on_delete=models.CASCADE, related_name='requests')
    tshirt_size = models.ForeignKey(TShirtSize, on_delete=models.CASCADE, related_name='requests')
    additional_notes = models.TextField(blank=True, null=True)
    is_fulfilled = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return f"{self.registered_user.full_name} - {self.tshirt_size} {self.tshirt_type}"
    
    def save(self, *args, **kwargs):
        # Always link to registered user based on registration code
        if self.registration_code and not self.registered_user:
            try:
                user = RegisteredUser.objects.get(registration_code=self.registration_code)
                self.registered_user = user
                self.event_name = user.event_name
            except RegisteredUser.DoesNotExist:
                pass
        
        super().save(*args, **kwargs)
    
    class Meta:
        ordering = ['-created_at']
        verbose_name = 'Apparel Request'
        verbose_name_plural = 'Apparel Requests'
        constraints = [
            models.UniqueConstraint(fields=['registered_user'], name='unique_user_request')
        ]
