from django.db import models
from django.utils.text import slugify
from tinymce.models import HTMLField

def get_default_brand():
    """Returns the default ProductBrand instance (e.g., Miavit)."""
    return ProductBrand.objects.first().id if ProductBrand.objects.exists() else None

class ProductCategory(models.Model):
    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(unique=True, blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.name

class ProductBrand(models.Model):
    """Represents a brand of products (e.g., Miavit, Koudijs)."""
    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(unique=True, blank=True)

    def __str__(self):
        return self.name

class Product(models.Model):
    """Represents a specific product belonging to a category and a brand."""
    name = models.CharField(max_length=255)
    brand = models.ForeignKey(ProductBrand, on_delete=models.CASCADE)
    category = models.ForeignKey(
        ProductCategory, 
        on_delete=models.CASCADE,
        null=True,  # <-- Add this to allow NULL values if necessary
        blank=True,
        related_name="products"    # <-- This makes it optional in forms
    )    
    slug = models.SlugField(unique=True, blank=True)
    description = HTMLField()
    nutritional_benefits = models.TextField(null=True, blank=True)  # ✅ Ensure this field exists
    packaging_options = models.TextField(null=True, blank=True)
    image = models.ImageField(upload_to='products/', blank=True, null=True)

    def __str__(self):
        return f"{self.name} - {self.brand.name}"
    

class PackagingOption(models.Model):
    product = models.ForeignKey(
        Product,
        on_delete=models.CASCADE,
        related_name='packaging',  # Change this from 'packaging_options' to 'packaging'
    )
    option = models.CharField(max_length=255)

    def __str__(self):
        return f"{self.product.name} - {self.option}"
