from django.db import models
from django.conf import settings  # ✅ اضافه کنید
from django_resized import ResizedImageField

class MainCategory(models.Model):
    name = models.CharField(max_length=100, verbose_name="نام دسته‌بندی اصلی")
    image = ResizedImageField(upload_to='main_categories/', size=[400, 300], quality=85, verbose_name="تصویر")
    order = models.IntegerField(default=0, verbose_name="ترتیب نمایش")
    is_active = models.BooleanField(default=True, verbose_name="فعال")
    
    class Meta:
        verbose_name = "دسته‌بندی اصلی"
        verbose_name_plural = "دسته‌بندی‌های اصلی"
        ordering = ['order']
    
    def __str__(self):
        return self.name

class Category(models.Model):
    name = models.CharField(max_length=100, verbose_name="نام زیردسته")
    main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE, verbose_name="دسته‌بندی اصلی")
    
    class Meta:
        verbose_name = "زیردسته"
        verbose_name_plural = "زیردسته‌ها"
    
    def __str__(self):
        return f"{self.name} - {self.main_category.name}"

class Product(models.Model):
    name = models.CharField(max_length=200, verbose_name="نام محصول")
    description = models.TextField(verbose_name="توضیحات")
    price = models.IntegerField(verbose_name="قیمت (تومان)")
    main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE, verbose_name="دسته‌بندی اصلی")
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="زیردسته")
    main_image = ResizedImageField(upload_to='products/', size=[800, 600], quality=90, blank=True, null=True, verbose_name="تصویر اصلی")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد")
    
    class Meta:
        verbose_name = "محصول"
        verbose_name_plural = "محصولات"
        ordering = ['-created_at']
    
    def __str__(self):
        return self.name

class ProductImage(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='images', verbose_name="محصول")
    image = ResizedImageField(upload_to='products/additional/', size=[600, 450], quality=85, verbose_name="تصویر")
    caption = models.CharField(max_length=200, blank=True, verbose_name="توضیح تصویر")
    order = models.IntegerField(default=0, verbose_name="ترتیب نمایش")
    
    class Meta:
        verbose_name = "تصویر محصول"
        verbose_name_plural = "تصاویر محصولات"
        ordering = ['order']
    
    def __str__(self):
        return f"تصویر {self.product.name}"

class Cart(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True, verbose_name="کاربر")  # ✅ تغییر
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد")
    
    class Meta:
        verbose_name = "سبد خرید"
        verbose_name_plural = "سبدهای خرید"
    
    def __str__(self):
        if self.user:
            return f"سبد خرید {self.user.phone}"  # ✅ تغییر (به جای username)
        return "سبد خرید مهمان"

class CartItem(models.Model):
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='items', verbose_name="سبد خرید")
    product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name="محصول")
    quantity = models.PositiveIntegerField(default=1, verbose_name="تعداد")
    added_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ افزودن")
    
    class Meta:
        verbose_name = "آیتم سبد خرید"
        verbose_name_plural = "آیتم‌های سبد خرید"
    
    def __str__(self):
        return f"{self.quantity} عدد {self.product.name}"
    
class ShopSettings(models.Model):
    """تنظیمات فروشگاه"""
    shipping_cost = models.IntegerField(default=0, verbose_name="هزینه ارسال (تومان)")
    free_shipping_threshold = models.IntegerField(default=0, verbose_name="حداقل مبلغ برای ارسال رایگان")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="آخرین به‌روزرسانی")
    
    class Meta:
        verbose_name = "تنظیمات فروشگاه"
        verbose_name_plural = "تنظیمات فروشگاه"
    
    def __str__(self):
        return f"هزینه ارسال: {self.shipping_cost:,} تومان"
    
    @classmethod
    def get_settings(cls):
        """دریافت یا ایجاد تنظیمات"""
        settings, created = cls.objects.get_or_create(id=1)
        return settings  