"""
CODH AI Engine Models
2S-SAI - Super Artificial Intelligence
"""

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


class AIReport(models.Model):
    """
    AI-generated project analysis reports
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='ai_reports')
    
    # Analysis Type
    ANALYSIS_TYPES = [
        ('project', 'Project Analysis'),
        ('wordpress', 'WordPress Site Analysis'),
        ('pricing', 'Pricing Recommendation'),
        ('hosting', 'Hosting Recommendation'),
    ]
    analysis_type = models.CharField(max_length=20, choices=ANALYSIS_TYPES, default='project')
    
    # Input data
    input_data = models.JSONField(default=dict, blank=True)
    
    # Scores (0-100)
    complexity_score = models.IntegerField(default=0)
    clarity_score = models.IntegerField(default=0)
    completeness_score = models.IntegerField(default=0)
    feasibility_score = models.IntegerField(default=0)
    
    # Analysis Results
    estimated_hours = models.IntegerField(null=True, blank=True)
    estimated_cost_min = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True)
    estimated_cost_max = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True)
    recommended_plan = models.CharField(max_length=100, blank=True)
    
    # Detailed analysis
    feature_breakdown = models.JSONField(default=list, blank=True)
    risk_assessment = models.JSONField(default=list, blank=True)
    recommendations = models.JSONField(default=list, blank=True)
    
    # Full report
    summary = models.TextField(blank=True)
    full_report = models.TextField(blank=True)
    
    # Status
    STATUS_CHOICES = [
        ('pending', 'Pending'),
        ('processing', 'Processing'),
        ('completed', 'Completed'),
        ('failed', 'Failed'),
    ]
    status = models.CharField(max_length=15, choices=STATUS_CHOICES, default='pending')
    
    # Error
    error_message = models.TextField(blank=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = 'AI Report'
        verbose_name_plural = 'AI Reports'
        ordering = ['-created_at']
    
    def __str__(self):
        return f"AI Report {self.id} ({self.get_analysis_type_display()})"


class PricingFormula(models.Model):
    """
    Dynamic pricing formulas
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    
    # Formula components
    base_cost = models.DecimalField(max_digits=12, decimal_places=2, default=0)
    hourly_rate = models.DecimalField(max_digits=10, decimal_places=2, default=50)
    
    # Complexity multipliers
    complexity_low_multiplier = models.DecimalField(max_digits=4, decimal_places=2, default=1.0)
    complexity_medium_multiplier = models.DecimalField(max_digits=4, decimal_places=2, default=1.5)
    complexity_high_multiplier = models.DecimalField(max_digits=4, decimal_places=2, default=2.5)
    
    # Feature costs
    feature_base_cost = models.DecimalField(max_digits=10, decimal_places=2, default=100)
    feature_premium_multiplier = models.DecimalField(max_digits=4, decimal_places=2, default=2.0)
    
    # Additional costs
    hosting_cost = models.DecimalField(max_digits=10, decimal_places=2, default=10)
    deployment_cost = models.DecimalField(max_digits=10, decimal_places=2, default=50)
    maintenance_monthly_cost = models.DecimalField(max_digits=10, decimal_places=2, default=25)
    
    # Adjustments
    ai_adjustment_enabled = models.BooleanField(default=True)
    min_ai_adjustment = models.DecimalField(max_digits=4, decimal_places=2, default=0.8)
    max_ai_adjustment = models.DecimalField(max_digits=4, decimal_places=2, default=1.5)
    
    # Discounts
    discount_threshold = models.DecimalField(max_digits=12, decimal_places=2, default=1000)
    discount_percent = models.DecimalField(max_digits=5, decimal_places=2, default=10)
    
    # Tax
    tax_rate = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    
    is_active = models.BooleanField(default=True)
    is_default = models.BooleanField(default=False)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = 'Pricing Formula'
        verbose_name_plural = 'Pricing Formulas'
    
    def __str__(self):
        return self.name
    
    def save(self, *args, **kwargs):
        if self.is_default:
            # Ensure only one default
            PricingFormula.objects.filter(is_default=True).update(is_default=False)
        super().save(*args, **kwargs)


class AIConversation(models.Model):
    """
    AI conversation history
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='ai_conversations')
    
    title = models.CharField(max_length=255, blank=True)
    
    # Context
    context_type = models.CharField(max_length=50, blank=True)
    context_id = models.CharField(max_length=100, blank=True)
    
    is_active = models.BooleanField(default=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = 'AI Conversation'
        verbose_name_plural = 'AI Conversations'
        ordering = ['-updated_at']


class AIMessage(models.Model):
    """
    Individual AI messages
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    conversation = models.ForeignKey(AIConversation, on_delete=models.CASCADE, related_name='messages')
    
    ROLE_CHOICES = [
        ('user', 'User'),
        ('assistant', 'Assistant'),
        ('system', 'System'),
    ]
    role = models.CharField(max_length=10, choices=ROLE_CHOICES)
    
    content = models.TextField()
    
    # Metadata
    tokens_used = models.IntegerField(null=True, blank=True)
    model = models.CharField(max_length=50, blank=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name = 'AI Message'
        verbose_name_plural = 'AI Messages'
        ordering = ['created_at']


class FeatureComplexity(models.Model):
    """
    Feature complexity definitions for AI analysis
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    
    # Complexity level
    LEVEL_CHOICES = [
        ('low', 'Low'),
        ('medium', 'Medium'),
        ('high', 'High'),
    ]
    level = models.CharField(max_length=10, choices=LEVEL_CHOICES)
    
    # Estimates
    estimated_hours_min = models.IntegerField(default=0)
    estimated_hours_max = models.IntegerField(default=0)
    
    # Keywords for auto-detection
    keywords = models.JSONField(default=list, blank=True)
    
    is_active = models.BooleanField(default=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name = 'Feature Complexity'
        verbose_name_plural = 'Feature Complexities'
        ordering = ['name']
