from django.db import models
from django.utils.text import slugify
from django_ckeditor_5.fields import CKEditor5Field


class AuctionListing(models.Model):
    TYPE_DOMAIN     = 'domain'

    TYPE_CHOICES = [
        (TYPE_DOMAIN, 'Domain'),
    ]

    STATUS_ACTIVE      = 'active'
    STATUS_UNDER_OFFER = 'under_offer'
    STATUS_SOLD        = 'sold'
    STATUS_DRAFT       = 'draft'

    STATUS_CHOICES = [
        (STATUS_ACTIVE,      'Active'),
        (STATUS_UNDER_OFFER, 'Under Offer'),
        (STATUS_SOLD,        'Sold'),
        (STATUS_DRAFT,       'Draft'),
    ]

    tenant      = models.ForeignKey(
        'tenants.Tenant', on_delete=models.CASCADE,
        null=True, blank=True, related_name='auction_listings'
    )
    asset_type      = models.CharField(max_length=20, choices=TYPE_CHOICES, default=TYPE_DOMAIN)
    name            = models.CharField(max_length=200, help_text='e.g. persepolis.club or @brandname')
    slug            = models.SlugField(max_length=250, blank=True)
    is_premium      = models.BooleanField(default=False, help_text='Show Premium badge')
    tagline         = models.CharField(max_length=200, blank=True, help_text='One-liner below the name')
    description     = CKEditor5Field(config_name='default', blank=True)
    asking_price    = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True)
    price_on_request = models.BooleanField(default=True)
    status          = models.CharField(max_length=20, choices=STATUS_CHOICES, default=STATUS_ACTIVE)

    # For the generated static page
    generate_page      = models.BooleanField(default=True, help_text='Generate a standalone HTML page')
    page_generated_at  = models.DateTimeField(null=True, blank=True)
    page_path          = models.CharField(max_length=300, blank=True)

    # SEO for generated page
    meta_description = models.TextField(blank=True)

    view_count  = models.PositiveIntegerField(default=0, editable=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-is_premium', 'name']
        unique_together = [('tenant', 'slug')]
        verbose_name = 'Auction Listing'
        verbose_name_plural = 'Auction Listings'

    def __str__(self):
        prefix = '[PREMIUM] ' if self.is_premium else ''
        return f'{prefix}{self.get_asset_type_display()} — {self.name}'

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

    @property
    def display_price(self):
        if self.price_on_request:
            return 'Price on Request'
        if self.asking_price:
            return f'£{self.asking_price:,.0f}'
        return 'Make an Offer'

    @property
    def type_icon(self):
        return 'fa-globe'
