from django.db import models
#slug için
from django.utils.text import slugify
from shortuuid.django_fields import ShortUUIDField
#blog modeli için import ettim
from django_prose_editor.fields import ProseEditorField


#kategori Modeli
class Category(models.Model):
   
    name = models.CharField(max_length=55, unique=True)
    category_number =ShortUUIDField(length=6, max_length=8, alphabet="1234567890",unique=True)
    image = models.ImageField(upload_to='categoriesImages', blank=True, null=True)
    slug = models.SlugField(unique=True, blank=True)
    is_active=models.BooleanField(default=False)
    is_mainpage=models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name) 
        super(Category,self).save(*args, **kwargs)


    

    def __str__(self):
        return self.name
    

    def save(self, *args, **kwargs):
        # Eski dosyayı sil
        if self.pk:
            old = Category.objects.get(pk=self.pk)
            if old.image and old.image != self.image:
                old.image.delete(save=False)
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        self.image.delete(save=False)
        super().delete(*args, **kwargs)
    
    class Meta:
        verbose_name_plural = "Kategoriler"

#Beden Ölçüleri Modeli
class Size(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name
    
    class Meta:
        verbose_name_plural = "Beden Ölçüleri"

#ürünler Modeli

class Product(models.Model):
    product_number = ShortUUIDField(length=8, max_length=10, alphabet="1234567890",unique=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="products")
    name = models.CharField(max_length=255)
    slug = models.SlugField(unique=True, blank=True, editable=False)
    description =ProseEditorField(blank=True, null=True)
    kombined = models.TextField(blank=True, null=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    sizes = models.ManyToManyField(Size, blank=True)
    rating = models.DecimalField(max_digits=2, decimal_places=1, default=4.0)
    shopier_url = models.URLField(blank=True, null=True)
    is_active=models.BooleanField(default=False)
    is_mainpage = models.BooleanField(default=False)
    is_sale =models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
     
    # Resim alanları
    image = models.ImageField(
        upload_to='productsImage/', 
        blank=True, 
        null=True,
            )
    image_url = models.URLField(blank=True, null=True)  

    created_date = models.DateTimeField(auto_now_add=True)


    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name) 
        super(Product,self).save(*args, **kwargs)



    def __str__(self):
        return self.name
    
    class Meta:
        verbose_name_plural = "Ürünler"

#Anasayfa Slider İçin
class Slider(models.Model):
    title = models.CharField(max_length=100, blank=True, null=True)
    desciription = models.CharField(max_length=255, blank=True, null=True)
    button_name = models.CharField(max_length=50, blank=True, null=True)
    image= models.ImageField(upload_to='slider_anasayfa',blank=True, null=True)



    def save(self, *args, **kwargs):
        # Eski dosyayı sil
        if self.pk:
            old = Slider.objects.get(pk=self.pk)
            if old.image and old.image != self.image:
                old.image.delete(save=False)
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        self.image.delete(save=False)
        super().delete(*args, **kwargs)

    class Meta:
        verbose_name_plural = "Slider"



    
class KampanyaSliders(models.Model):
    
    kampanya_title = models.CharField(max_length=255, blank=True, null=True)
    kampanya_desciription = models.CharField(max_length=255, blank=True, null=True)
    button_name = models.CharField(max_length=50, blank=True, null=True)
    category =  models.ForeignKey(Category, on_delete=models.CASCADE)
    image= models.ImageField(upload_to='slider_campanya',blank=True, null=True)

    class Meta:
        verbose_name_plural = "Kampanya_Slider"
    
    def save(self, *args, **kwargs):
        # Eski dosyayı sil
        if self.pk:
            old = KampanyaSliders.objects.get(pk=self.pk)
            if old.image and old.image != self.image:
                old.image.delete(save=False)
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        self.image.delete(save=False)
        super().delete(*args, **kwargs)


class About(models.Model):
    title= models.CharField(max_length=200)
    title_2 =models.CharField(max_length=200,blank=True, null=True)
    title_3 =models.CharField(max_length=200,blank=True, null=True)
    content=ProseEditorField(blank=True, null=True)
    content_1=ProseEditorField(blank=True, null=True)
    content_2=ProseEditorField(blank=True, null=True)
    image= models.ImageField(upload_to='about/',blank=True, null=True)
    creat_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Hakkımızda"

    def save(self, *args, **kwargs):
        # Eski dosyayı sil
        if self.pk:
            old = About.objects.get(pk=self.pk)
            if old.image and old.image != self.image:
                old.image.delete(save=False)
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        self.image.delete(save=False)
        super().delete(*args, **kwargs)
    

#sitenin genel ayarları için 
class Setting(models.Model):
    logo_1= models.ImageField(upload_to="logo",blank=True, null=True)
    logo_2= models.ImageField(upload_to="logo",blank=True, null=True)
    title = models.CharField(max_length=255,blank=True, null=True)
    description = models.CharField(max_length=255,blank=True, null=True)
    keywords = models.CharField(max_length=255,blank=True, null=True)
    footer_content = models.TextField(blank=True, null=True)
    phone_number= models.CharField(max_length=15,blank=True, null=True)
    phone_mobil= models.CharField(max_length=15,blank=True, null=True)
    email=models.EmailField(blank=True, null=True)
    city= models.CharField(max_length=25)
    district= models.CharField(max_length=50)
    address = models.TextField()
    open_hours= models.CharField(max_length=10)
    close_hours= models.CharField(max_length=10)
    top_content=models.CharField(max_length=255,blank=True, null=True)
    top_content_2=models.CharField(max_length=255,blank=True, null=True)
    button_name =models.CharField(max_length=50, blank=True, null=True)
    kayan_text= models.CharField(max_length=255, blank=True,null=True)
    kayan_text_emoji= models.CharField(max_length=25, default="✨", blank=True)
    facebook_url =models.URLField(blank=True, null=True)
    instagram_url =models.URLField(blank=True, null=True)
    twitter_url =models.URLField(blank=True, null=True)
    youtube_url =models.URLField(blank=True, null=True)
    tiktok_url =models.URLField(blank=True, null=True)
    pinterest_url =models.URLField(blank=True, null=True)
    kampanya_slider_title = models.CharField(max_length=100, blank=True, null=True)
    slider_desciription = models.CharField(max_length=255, blank=True, null=True)
    paralel_title1 =models.CharField(max_length=255,blank=True, null=True)
    paralel_title2 =models.CharField(max_length=255,blank=True, null=True)
    paralel_content_buton=models.CharField(max_length=50,blank=True, null=True)
    parelel_content_image=models.ImageField(upload_to="paralel_bar",blank=True, null=True)
    blog_page_title = models.CharField(max_length=255, blank=True, null=True)
    blog_page_subtitle = models.CharField(max_length=255, blank=True, null=True)
    footer_subscribe_title = models.CharField(max_length=255, blank=True, null=True)
    footer_subscribe_desc = models.CharField(max_length=255, blank=True, null=True)
    footer_contact_title = models.CharField(max_length=255, blank=True, null=True)
    footer_content_tel_number = models.CharField(max_length=255, blank=True, null=True)
    footer_content_description = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        verbose_name_plural = "Genel_Site_Bilgileri"


    #blog 
class Blog(models.Model):
    title= models.CharField(max_length=200)
    image= models.ImageField(upload_to='blogs/',blank=True, null=True)
    image_url = models.URLField(blank=True, null=True)  # Dış URL'den resim bağlantısı
    content=ProseEditorField(blank=True, null=True)
    slug= models.SlugField(max_length=200, unique=True, blank=True, editable=False)
    created_date = models.DateTimeField(auto_now_add=True)
    update_at= models.DateTimeField(auto_now=True)
    

    def save(self, *args, **kwargs):
        # Eski resmi sil
        if self.pk:
            old = Blog.objects.get(pk=self.pk)
            if old.image and old.image != self.image:
                old.image.delete(save=False)
        
        # Slug oluştur (benzersiz olacak şekilde)
        if not self.slug:
            self.slug = slugify(self.title)
            original_slug = self.slug
            counter = 1
            while Blog.objects.filter(slug=self.slug).exists():
                self.slug = f"{original_slug}-{counter}"
                counter += 1
        
        super().save(*args, **kwargs)  # Tek bir save() metodu

    def delete(self, *args, **kwargs):
        if self.image:
            self.image.delete(save=False)
        super().delete(*args, **kwargs)

    

    def __str__(self):
        return self.title
    
    class Meta:
        verbose_name_plural = "Blog_Yazılari"

#kvk metni modeli
class KvkkAydinlatma(models.Model):
    title = models.CharField(max_length=255)
    content=ProseEditorField(blank=True, null=True)

    def __str__(self):
        return self.title
    
    class Meta:
        verbose_name_plural = "Kvkk_Aydinlatma_Metni"


#kullanım koşulları  modeli
class KullanimKosullari(models.Model):
    title = models.CharField(max_length=255)
    content=ProseEditorField(blank=True, null=True)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = "Kullanim_Koşullari"
    

#gizlilik politikası koşulları  modeli    
class GizlilikPolitikasi(models.Model):
    title = models.CharField(max_length=255)
    content=ProseEditorField(blank=True, null=True)

    def __str__(self):
        return self.title


    class Meta:
        verbose_name_plural = "Gizlilik_Politikası"

#gizlilik politikası koşulları  modeli    
class IadeveDegisiklikPolitikasi(models.Model):
    title = models.CharField(max_length=255)
    content=ProseEditorField(blank=True, null=True)

    def __str__(self):
        return self.title
    
    class Meta:
        verbose_name_plural = "Değişim_ve_İade_Politikasi"


#Siteye Mailini bırakanlar
class BultenAbonelik(models.Model):
    email = models.EmailField(unique=True)
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email
    
    class Meta:
        verbose_name_plural = "Bültene_Abone_Olanlar"