from django.db import models
from django.urls import reverse
from django.utils.text import slugify
from django.utils import timezone
from ckeditor_uploader.fields import RichTextUploadingField


class SalesUpdate(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(max_length=280, unique=True, blank=True)
    excerpt = models.CharField(max_length=300, blank=True)
    content = RichTextUploadingField()
    cover_image = models.ImageField(upload_to='updates/', blank=True, null=True)

    related_property = models.ForeignKey(
        'properties.Property', on_delete=models.SET_NULL, blank=True, null=True, related_name='updates'
    )

    is_published = models.BooleanField(default=True)
    publish_at = models.DateTimeField(default=timezone.now,
                                      help_text='Schedule when this update goes live')

    author = models.ForeignKey('auth.User', on_delete=models.SET_NULL, blank=True, null=True)
    views_count = models.PositiveIntegerField(default=0)

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

    class Meta:
        ordering = ['-publish_at']

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        if not self.slug:
            base = slugify(self.title)[:240]
            slug = base
            i = 1
            while SalesUpdate.objects.filter(slug=slug).exclude(pk=self.pk).exists():
                slug = f"{base}-{i}"
                i += 1
            self.slug = slug
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('sales_updates:detail', kwargs={'slug': self.slug})

    @property
    def published_at(self):
        return self.publish_at

    @property
    def is_live(self):
        return self.is_published and self.publish_at <= timezone.now()
