from django.db import models
from django_ckeditor_5.fields import CKEditor5Field


def expansion_from_gamebuild(gamebuild):
    """Etiqueta de expansión a partir del build del cliente.

    Distingue el retail antiguo del relanzamiento WoW Classic:
      - 12340 -> 'WotLK'            (3.3.5a, retail/privado clásico)
      - 44832..54261 -> 'WotLK Classic'      (3.4.x; 3.4.3 = 54261)
      - 15595 -> 'Cataclysm'        (4.3.4 retail)
      - 54332..60000 -> 'Cataclysm Classic'  (4.4.x)
    WotLK Classic llega a 3.4.3=54261 y Cataclysm Classic empieza en 4.4.0=54332,
    están muy pegados: de ahí el corte en 54261. Nova WoW corre 3.4.3 -> WotLK Classic.
    """
    if gamebuild is None:
        return 'Unknown'
    if gamebuild == 12340:
        return 'WotLK'
    if 44000 <= gamebuild <= 54261:
        return 'WotLK Classic'
    if gamebuild == 15595:
        return 'Cataclysm'
    if 54262 <= gamebuild <= 60000:
        return 'Cataclysm Classic'
    return 'Unknown'


class Noticia(models.Model):
    titulo = models.CharField(max_length=200)
    contenido = CKEditor5Field('Contenido', config_name='default')
    fecha_publicacion = models.DateTimeField(auto_now=True)  # Cambiado a DateTimeField
    fecha_fin_evento = models.DateField(null=True, blank=True)
    enlace = models.URLField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.titulo

class MaintenanceMode(models.Model):
    is_active = models.BooleanField(default=False)

    def __str__(self):
        return "Maintenance Mode"        

class ClienteCategoria(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.nombre

class SistemaOperativo(models.Model):
    categoria = models.ForeignKey(ClienteCategoria, related_name='sistemas_operativos', on_delete=models.CASCADE)
    nombre = models.CharField(max_length=100)
    url_descarga = models.URLField()

    def __str__(self):
        return f"{self.nombre} - {self.categoria.nombre}"

class ServerSelection(models.Model):
    server_id = models.IntegerField()
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    port = models.IntegerField()
    gamebuild = models.IntegerField()

    @property
    def expansion(self):
        return expansion_from_gamebuild(self.gamebuild)

    def __str__(self):
        return f"{self.name} ({self.expansion})"

class DownloadClientPage(models.Model):
    title = models.CharField(max_length=255, default="Descarga del cliente")
    content = CKEditor5Field('Contenido', config_name='default')
    mac_instructions = CKEditor5Field('Instrucciones para macOS', blank=True, null=True, config_name='default')
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

class ContentCreator(models.Model):
    title = models.CharField(max_length=200)
    description = CKEditor5Field('Descripción', config_name='default')
    content_type = models.CharField(max_length=60, default="Contenido general")
    subtitle = models.CharField(max_length=60, default="Nova WoW")
    youtube_video_url = models.URLField(max_length=300, blank=True, null=True)
    avatar_image_url = models.URLField(max_length=300, blank=True, null=True)
    youtube_channel_url = models.URLField(max_length=300, blank=True, null=True)
    facebook_page_url = models.URLField(max_length=300, blank=True, null=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title
