import uuid
from django.db import models
from apps.core.models import BaseModel
from django.conf import settings


class FeatureFlag(BaseModel):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=150, unique=True, db_index=True)
    description = models.TextField(blank=True)
    is_enabled = models.BooleanField(default=False, db_index=True)
    rollout_percentage = models.PositiveSmallIntegerField(default=0)

    class Meta:
        ordering = ['-created_at']

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        # emit feature updated event if event system available
        try:
            from apps.core.events import emit_event
            emit_event('feature_flag_updated', {'flag': self.name, 'is_enabled': self.is_enabled, 'rollout': self.rollout_percentage})
        except Exception:
            pass


class UserFeatureFlag(BaseModel):
    feature_flag = models.ForeignKey(FeatureFlag, on_delete=models.CASCADE, related_name='user_overrides')
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='feature_flags')
    is_enabled = models.BooleanField(default=True)

    class Meta:
        unique_together = ('feature_flag', 'user')
        indexes = [models.Index(fields=['user'])]

    def __str__(self):
        return f"{self.feature_flag.name} for {self.user} = {self.is_enabled}"
