import uuid
from django.db import models
from django.utils import timezone

class BurnoutAnalysis(models.Model):
    """Store burnout analysis results"""
    
    SEVERITY_CHOICES = [
        ('low', 'Low'),
        ('medium', 'Medium'),
        ('high', 'High'),
        ('critical', 'Critical'),
    ]
    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user_id = models.UUIDField(db_index=True)
    date = models.DateField()
    risk_score = models.FloatField()  # 0-100
    severity = models.CharField(max_length=20, choices=SEVERITY_CHOICES)
    risk_factors = models.JSONField(default=dict)  # Detailed breakdown
    recommendations = models.JSONField(default=list)  # Suggested balances to use
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = 'burnout_analysis'
        ordering = ['-date', '-created_at']
        indexes = [
            models.Index(fields=['user_id', 'date']),
        ]
    
    def __str__(self):
        return f"Burnout Analysis for User {self.user_id} on {self.date} - {self.severity}"


class BurnoutNotification(models.Model):
    """Track sent burnout notifications"""
    
    NOTIFICATION_TYPES = [
        ('burnout_alert', 'Burnout Alert'),
        ('balance_suggestion', 'Balance Suggestion'),
        ('recovery_reminder', 'Recovery Reminder'),
    ]
    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user_id = models.UUIDField(db_index=True)
    notification_type = models.CharField(max_length=50, choices=NOTIFICATION_TYPES)
    title = models.CharField(max_length=200)
    message = models.TextField()
    risk_score = models.FloatField()
    recommendation = models.JSONField(default=dict)
    is_read = models.BooleanField(default=False)
    sent_at = models.DateTimeField(auto_now_add=True)
    read_at = models.DateTimeField(null=True, blank=True)
    
    class Meta:
        db_table = 'burnout_notifications'
        ordering = ['-sent_at']
        indexes = [
            models.Index(fields=['user_id', 'is_read']),
        ]
    
    def __str__(self):
        return f"Notification for User {self.user_id} - {self.notification_type}"
    
    def mark_as_read(self):
        """Mark notification as read"""
        self.is_read = True
        self.read_at = timezone.now()
        self.save()


class FeatureFlag(models.Model):
    """Central feature flag storage"""
    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100, unique=True)
    enabled = models.BooleanField(default=False)
    description = models.TextField(blank=True)
    config_data = models.JSONField(default=dict)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        db_table = 'feature_flags'
        ordering = ['name']
    
    def __str__(self):
        return f"{self.name}: {'Enabled' if self.enabled else 'Disabled'}"


class CompanyFeatureOverride(models.Model):
    """Company-level overrides for feature flags"""
    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    company_id = models.UUIDField()
    feature_flag = models.ForeignKey(FeatureFlag, on_delete=models.CASCADE)
    enabled = models.BooleanField(default=False)
    override_config = models.JSONField(default=dict)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        db_table = 'company_feature_overrides'
        unique_together = ['company_id', 'feature_flag']
    
    def __str__(self):
        return f"{self.company_id} - {self.feature_flag.name}"
