"""
CODH WordPress Integration Models
WordPress auto-detection and synchronization
"""

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


class WordPressSite(models.Model):
    """
    Connected WordPress sites
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='wordpress_sites')
    
    # Site Details
    name = models.CharField(max_length=255)
    url = models.URLField()
    
    # API Credentials
    api_url = models.URLField(blank=True)
    api_key = models.CharField(max_length=255, blank=True)
    jwt_token = models.TextField(blank=True)
    
    # Connection Status
    STATUS_CHOICES = [
        ('pending', 'Pending'),
        ('connected', 'Connected'),
        ('error', 'Error'),
        ('disconnected', 'Disconnected'),
    ]
    status = models.CharField(max_length=15, choices=STATUS_CHOICES, default='pending')
    
    # Last sync
    last_sync_at = models.DateTimeField(null=True, blank=True)
    sync_error = models.TextField(blank=True)
    
    # Detected Info
    wp_version = models.CharField(max_length=20, blank=True)
    php_version = models.CharField(max_length=20, blank=True)
    
    # Site metrics
    posts_count = models.IntegerField(default=0)
    pages_count = models.IntegerField(default=0)
    users_count = models.IntegerField(default=0)
    media_count = models.IntegerField(default=0)
    
    # Size estimate
    database_size_mb = models.IntegerField(default=0)
    uploads_size_mb = models.IntegerField(default=0)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = 'WordPress Site'
        verbose_name_plural = 'WordPress Sites'
        ordering = ['-created_at']
    
    def __str__(self):
        return f"{self.name} ({self.url})"


class WordPressTheme(models.Model):
    """
    Detected WordPress themes
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    site = models.ForeignKey(WordPressSite, on_delete=models.CASCADE, related_name='themes')
    
    name = models.CharField(max_length=255)
    slug = models.CharField(max_length=255)
    version = models.CharField(max_length=50, blank=True)
    
    is_active = models.BooleanField(default=False)
    is_child_theme = models.BooleanField(default=False)
    
    author = models.CharField(max_length=255, blank=True)
    theme_uri = models.URLField(blank=True)
    
    detected_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name = 'WordPress Theme'
        verbose_name_plural = 'WordPress Themes'


class WordPressPlugin(models.Model):
    """
    Detected WordPress plugins
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    site = models.ForeignKey(WordPressSite, on_delete=models.CASCADE, related_name='plugins')
    
    name = models.CharField(max_length=255)
    slug = models.CharField(max_length=255)
    version = models.CharField(max_length=50, blank=True)
    
    is_active = models.BooleanField(default=True)
    
    author = models.CharField(max_length=255, blank=True)
    plugin_uri = models.URLField(blank=True)
    
    # Plugin type detection
    is_woocommerce = models.BooleanField(default=False)
    is_security = models.BooleanField(default=False)
    is_seo = models.BooleanField(default=False)
    is_caching = models.BooleanField(default=False)
    is_backup = models.BooleanField(default=False)
    is_subscription = models.BooleanField(default=False)
    
    detected_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name = 'WordPress Plugin'
        verbose_name_plural = 'WordPress Plugins'


class WordPressDetectionResult(models.Model):
    """
    WordPress site detection results
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    site = models.OneToOneField(WordPressSite, on_delete=models.CASCADE, related_name='detection_result')
    
    # Detected characteristics
    has_woocommerce = models.BooleanField(default=False)
    has_membership = models.BooleanField(default=False)
    has_subscription = models.BooleanField(default=False)
    has_lms = models.BooleanField(default=False)
    
    # Complexity indicators
    ecommerce_complexity = models.CharField(max_length=20, default='none')  # none, simple, complex
    content_volume = models.CharField(max_length=20, default='low')  # low, medium, high
    custom_development = models.BooleanField(default=False)
    
    # Recommended plan
    recommended_plan = models.CharField(max_length=100, blank=True)
    recommended_hosting = models.CharField(max_length=100, blank=True)
    
    # AI analysis
    ai_analysis = models.JSONField(default=dict, blank=True)
    
    detected_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        verbose_name = 'WordPress Detection Result'
        verbose_name_plural = 'WordPress Detection Results'


class WordPressSyncLog(models.Model):
    """
    WordPress synchronization logs
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    
    site = models.ForeignKey(WordPressSite, on_delete=models.CASCADE, related_name='sync_logs')
    
    SYNC_TYPES = [
        ('full', 'Full Sync'),
        ('users', 'Users Sync'),
        ('subscriptions', 'Subscriptions Sync'),
        ('content', 'Content Sync'),
    ]
    sync_type = models.CharField(max_length=20, choices=SYNC_TYPES)
    
    STATUS_CHOICES = [
        ('pending', 'Pending'),
        ('running', 'Running'),
        ('completed', 'Completed'),
        ('failed', 'Failed'),
    ]
    status = models.CharField(max_length=15, choices=STATUS_CHOICES)
    
    details = models.JSONField(default=dict, blank=True)
    error_message = models.TextField(blank=True)
    
    started_at = models.DateTimeField(auto_now_add=True)
    completed_at = models.DateTimeField(null=True, blank=True)
    
    class Meta:
        verbose_name = 'WordPress Sync Log'
        verbose_name_plural = 'WordPress Sync Logs'
        ordering = ['-started_at']
