from django.db import models
from apps.accounts.models import User
from apps.business.products.models import Product

class LuckyDip(models.Model):
    name = models.CharField(max_length=255)
    entry_amount = models.DecimalField(max_digits=12, decimal_places=2)
    max_members = models.PositiveIntegerField()
    current_members = models.PositiveIntegerField(default=0)
    is_active = models.BooleanField(default=True)
    draw_date = models.DateTimeField(null=True, blank=True)
    announcement_title = models.CharField(max_length=255, blank=True, default='')
    announcement_message = models.TextField(blank=True, default='')
    is_drawn = models.BooleanField(default=False)
    max_slots_per_user = models.PositiveIntegerField(default=5)

    def __str__(self):
        return self.name

class LuckyDipPrize(models.Model):
    lucky_dip = models.ForeignKey(LuckyDip, on_delete=models.CASCADE, related_name='prizes')
    position = models.PositiveIntegerField()
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()

    class Meta:
        unique_together = ('lucky_dip', 'position')
        ordering = ['position']

    def __str__(self):
        return f"{self.lucky_dip.name} Prize {self.position}"

class LuckyDipEntry(models.Model):
    lucky_dip = models.ForeignKey(LuckyDip, on_delete=models.CASCADE, related_name='entries')
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    entry_number = models.PositiveIntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ('lucky_dip', 'entry_number')
        ordering = ['entry_number']
        indexes = [
            models.Index(fields=['lucky_dip']),
            models.Index(fields=['user']),
            models.Index(fields=['entry_number']),
        ]

    def __str__(self):
        return f"{self.lucky_dip.name} Entry {self.entry_number} by {self.user_id}"