from django.db import models
from django.urls import reverse
from django.utils.text import slugify


class BlogPost(models.Model):
    title = models.CharField(max_length=220)
    slug = models.SlugField(max_length=240, unique=True)
    excerpt = models.TextField()
    content = models.TextField()
    category = models.CharField(max_length=80)
    author_name = models.CharField(max_length=100)
    author_role = models.CharField(max_length=120, blank=True)
    author_initials = models.CharField(max_length=4, blank=True)
    cover_image_url = models.URLField(blank=True)
    read_minutes = models.PositiveSmallIntegerField(default=5)
    is_featured = models.BooleanField(default=False)
    is_published = models.BooleanField(default=True)
    views_count = models.PositiveIntegerField(default=0)
    published_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-is_featured', '-published_at']

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        if not self.author_initials and self.author_name:
            parts = self.author_name.split()
            self.author_initials = ''.join(p[0].upper() for p in parts[:2])
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('blog:detail', kwargs={'slug': self.slug})
