"""
CODH Analytics Models
System analytics and reporting
"""

import uuid
from django.db import models
from django.conf import settings


class AnalyticsEvent(models.Model):
    """
    Analytics events tracking
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True)
    
    EVENT_CATEGORIES = [
        ('user', 'User Action'),
        ('project', 'Project'),
        ('hosting', 'Hosting'),
        ('subscription', 'Subscription'),
        ('payment', 'Payment'),
        ('deployment', 'Deployment'),
        ('api', 'API'),
    ]
    category = models.CharField(max_length=20, choices=EVENT_CATEGORIES)
    
    event_name = models.CharField(max_length=100)
    
    # Event data
    properties = models.JSONField(default=dict, blank=True)
    
    # Context
    ip_address = models.GenericIPAddressField(null=True, blank=True)
    user_agent = models.TextField(blank=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name = 'Analytics Event'
        verbose_name_plural = 'Analytics Events'
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['category', 'event_name']),
            models.Index(fields=['created_at']),
        ]


class DailyMetrics(models.Model):
    """
    Daily aggregated metrics
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    date = models.DateField(unique=True)
    
    # User metrics
    new_users = models.IntegerField(default=0)
    active_users = models.IntegerField(default=0)
    
    # Project metrics
    new_projects = models.IntegerField(default=0)
    completed_projects = models.IntegerField(default=0)
    
    # Hosting metrics
    new_hosting_accounts = models.IntegerField(default=0)
    suspended_accounts = models.IntegerField(default=0)
    
    # Subscription metrics
    new_subscriptions = models.IntegerField(default=0)
    cancelled_subscriptions = models.IntegerField(default=0)
    renewed_subscriptions = models.IntegerField(default=0)
    
    # Revenue metrics
    total_revenue = models.DecimalField(max_digits=12, decimal_places=2, default=0)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = 'Daily Metrics'
        verbose_name_plural = 'Daily Metrics'
        ordering = ['-date']


class UserEngagement(models.Model):
    """
    User engagement tracking
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='engagement')
    
    # Session metrics
    session_count = models.IntegerField(default=0)
    total_session_duration = models.IntegerField(default=0)  # seconds
    
    # Feature usage
    projects_created = models.IntegerField(default=0)
    deployments_made = models.IntegerField(default=0)
    support_tickets = models.IntegerField(default=0)
    
    # Last activity
    last_active_at = models.DateTimeField(null=True, blank=True)
    
    # Calculated score
    engagement_score = models.IntegerField(default=0)
    
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = 'User Engagement'
        verbose_name_plural = 'User Engagement'
