from django.db import models
from django.urls import reverse
from django.utils.text import slugify


class Category(models.Model):
    """Danh mục bài viết: Tin tức, Sự kiện, Hướng dẫn..."""
    name = models.CharField(max_length=100, verbose_name='Tên danh mục')
    slug = models.SlugField(unique=True, blank=True)
    description = models.TextField(blank=True, verbose_name='Mô tả')
    order = models.IntegerField(default=0, verbose_name='Thứ tự')
    
    class Meta:
        verbose_name = 'Danh mục'
        verbose_name_plural = 'Danh mục'
        ordering = ['order', 'name']
    
    def __str__(self):
        return self.name
    
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)


class Post(models.Model):
    """Bài viết tin tức/sự kiện"""
    title = models.CharField(max_length=255, verbose_name='Tiêu đề')
    slug = models.SlugField(unique=True, blank=True, max_length=255)
    content = models.TextField(verbose_name='Nội dung')  # HTML content
    excerpt = models.TextField(blank=True, verbose_name='Tóm tắt')
    
    category = models.ForeignKey(
        Category, 
        on_delete=models.SET_NULL, 
        null=True, 
        related_name='posts',
        verbose_name='Danh mục'
    )
    
    thumbnail = models.ImageField(
        upload_to='posts/thumbnails/', 
        null=True, 
        blank=True,
        verbose_name='Ảnh đại diện'
    )
    
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Ngày tạo')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='Ngày cập nhật')
    published_at = models.DateTimeField(null=True, blank=True, verbose_name='Ngày đăng')
    
    is_published = models.BooleanField(default=True, verbose_name='Đã xuất bản')
    is_featured = models.BooleanField(default=False, verbose_name='Bài nổi bật')
    
    views = models.PositiveIntegerField(default=0, verbose_name='Lượt xem')
    
    class Meta:
        verbose_name = 'Bài viết'
        verbose_name_plural = 'Bài viết'
        ordering = ['-created_at']
    
    def __str__(self):
        return self.title
    
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)
    
    def get_absolute_url(self):
        return reverse('blog:post_detail', kwargs={'pk': self.pk, 'slug': self.slug})
    
    def get_category_display(self):
        return f'[{self.category.name}]' if self.category else ''
