from django.db import models
from django.utils.text import slugify
from unidecode import unidecode  # لتحويل النص العربي إلى لاتيني

class PortfolioCategory(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True, blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            base_slug = slugify(unidecode(self.name))
            slug = base_slug
            counter = 1
            while PortfolioCategory.objects.filter(slug=slug).exclude(pk=self.pk).exists():
                slug = f"{base_slug}-{counter}"
                counter += 1
            self.slug = slug
        super().save(*args, **kwargs)

    def __str__(self):
        return self.name


class PortfolioItem(models.Model):
    category = models.ForeignKey(PortfolioCategory, on_delete=models.CASCADE, blank=True, null=True)
    title = models.CharField(max_length=200, blank=True, null=True)
    subtitle = models.CharField(max_length=200, blank=True, null=True)
    slug = models.SlugField(unique=True, blank=True)
    tags = models.CharField(max_length=255, help_text="Comma-separated tags", blank=True, null=True)
    description = models.TextField(blank=True, null=True)
    date = models.DateField(blank=True, null=True)
    client = models.CharField(max_length=100, blank=True, null=True)
    website = models.URLField(blank=True, null=True)
    badge = models.CharField(max_length=100, blank=True, null=True)
    main_image = models.ImageField(upload_to="portfolio/", blank=True, null=True)
    features = models.TextField(blank=True, null=True, help_text="افصل كل ميزة بسطر جديد")

    def save(self, *args, **kwargs):
        if not self.slug and self.title:
            self.slug = slugify(unidecode(self.title))
        super().save(*args, **kwargs)

    def tag_list(self):
        return [tag.strip() for tag in self.tags.split(",")] if self.tags else []

    def feature_list(self):
        return [feature.strip() for feature in self.features.split("\n") if feature.strip()] if self.features else []

    def __str__(self):
        return self.title or "بدون عنوان"


class PortfolioGalleryImage(models.Model):
    item = models.ForeignKey(PortfolioItem, related_name='gallery_images', on_delete=models.CASCADE)
    image = models.ImageField(upload_to='portfolio/gallery/')

    def __str__(self):
        return f"Image for {self.item.title if self.item else 'بدون عنصر'}"
