from ckeditor_uploader.fields import RichTextUploadingField
from extensions.utils import jalali_converter
from user.models import IPAddress
from core import models as coreModel
from django.utils import timezone
from django.db import models


def car_blog(instance, filename):
    return "blog/car/{}".format(filename)


def product_blog(instance, filename):
    return "blog/product/{}".format(filename)


def other_blog(instance, filename):
    return "blog/other/{}".format(filename)


def news(instance, filename):
    return "blog/news/{}".format(filename)


class CarArticle(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=250, verbose_name="عنوان")
    link = models.SlugField(max_length=250, null=True, unique=True, allow_unicode=True, db_collation='utf8_persian_ci', verbose_name="لینک")
    abstract = models.TextField(null=True, verbose_name="چکیده")
    image = models.ImageField(upload_to=car_blog, null=True, blank=True, verbose_name="تصویر اصلی")
    content = RichTextUploadingField(null=True, blank=True, verbose_name="محتوا")
    brand = models.ForeignKey(coreModel.Brand, on_delete=models.CASCADE, null=True, verbose_name="برند")
    car = models.ForeignKey(coreModel.Car, on_delete=models.CASCADE, blank=True, null=True, verbose_name="خودرو")
    type = models.ForeignKey(coreModel.Type, on_delete=models.CASCADE, blank=True, null=True, verbose_name="تیپ")
    production_start_year = models.IntegerField(null=True, blank=True, verbose_name="شروع سال تولید خودرو")
    production_end_year = models.IntegerField(null=True, blank=True, verbose_name="پایان سال تولید خودرو")
    view = models.ManyToManyField(IPAddress, blank=True, related_name="car_view", verbose_name="تعداد بازدید",
                                  editable=False)
    author = models.CharField(max_length=250, null=True, blank=True, verbose_name="نویسنده")
    published = models.DateTimeField(default=timezone.now, verbose_name="زمان انتشار")
    created = models.DateTimeField(auto_now_add=True, verbose_name="زمان ثبت")
    updated = models.DateTimeField(auto_now=True, verbose_name="زمان ویرایش")
    meta_title = models.CharField(max_length=65, null=True, blank=True, verbose_name='عنوان سئو صفحه نمایش این مقاله (title)')
    meta_description = models.CharField(max_length=160, null=True, blank=True, verbose_name='توضیحات سئو صفحه نمایش این مقاله (description)')
    admin_order = models.PositiveIntegerField(default=0, blank=False, null=False, verbose_name="اولویت نمایش")

    class Meta:
        ordering = ('admin_order',)
        verbose_name = "مقاله خودرو"
        verbose_name_plural = "مقالات خودرو"

    def __str__(self):
        return self.title

    def jalali_created(self):
        return jalali_converter(self.created)

    def jalali_updates(self):
        return jalali_converter(self.updated)

    def jalali_published(self):
        return jalali_converter(self.published)

    def view_count(self):
        return self.view.count()

    jalali_created.short_description = "زمان ثبت"
    jalali_updates.short_description = "زمان ویرایش"
    jalali_published.short_description = "زمان انتشار"
    view_count.short_description = "تعداد بازدید"


class ProductArticle(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=250, verbose_name="عنوان")
    link = models.SlugField(max_length=250, null=True, unique=True, allow_unicode=True, db_collation='utf8_persian_ci', verbose_name="لینک")
    abstract = models.TextField(null=True, verbose_name="چکیده")
    image = models.ImageField(upload_to=product_blog, null=True, blank=True, verbose_name="تصویر اصلی")
    content = RichTextUploadingField(null=True, blank=True, verbose_name="محتوا")
    subcategory = models.ForeignKey(coreModel.Subcategory, on_delete=models.CASCADE, null=True,
                                    verbose_name="دسته بندی")
    product = models.ForeignKey(coreModel.Product, on_delete=models.CASCADE, null=True, verbose_name="قطعه")
    view = models.ManyToManyField(IPAddress, blank=True, related_name="product_view", verbose_name="تعداد بازدید",
                                  editable=False)
    author = models.CharField(max_length=250, null=True, blank=True, verbose_name="نویسنده")
    published = models.DateTimeField(default=timezone.now, verbose_name="زمان انتشار")
    created = models.DateTimeField(auto_now_add=True, verbose_name="زمان ثبت")
    updated = models.DateTimeField(auto_now=True, verbose_name="زمان ویرایش")
    meta_title = models.CharField(max_length=65, null=True, blank=True, verbose_name='عنوان سئو صفحه نمایش این مقاله (title)')
    meta_description = models.CharField(max_length=160, null=True, blank=True, verbose_name='توضیحات سئو صفحه نمایش این مقاله (description)')

    class Meta:
        verbose_name = "مقاله قطعه"
        verbose_name_plural = "مقالات قطعه"

    def __str__(self):
        return self.title

    def jalali_created(self):
        return jalali_converter(self.created)

    def jalali_updates(self):
        return jalali_converter(self.updated)

    def jalali_published(self):
        return jalali_converter(self.published)

    def view_count(self):
        return self.view.count()

    jalali_created.short_description = "زمان ثبت"
    jalali_updates.short_description = "زمان ویرایش"
    jalali_published.short_description = "زمان انتشار"
    view_count.short_description = "تعداد بازدید"


class Other(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=250, verbose_name="عنوان")
    link = models.SlugField(max_length=250, null=True, unique=True, allow_unicode=True, db_collation='utf8_persian_ci', verbose_name="لینک")
    abstract = models.TextField(null=True, verbose_name="چکیده")
    image = models.ImageField(upload_to=other_blog, null=True, blank=True, verbose_name="تصویر اصلی")
    content = RichTextUploadingField(null=True, blank=True, verbose_name="محتوا")
    view = models.ManyToManyField(IPAddress, blank=True, related_name="other_view", verbose_name="تعداد بازدید",
                                  editable=False)
    author = models.CharField(max_length=250, null=True, blank=True, verbose_name="نویسنده")
    published = models.DateTimeField(default=timezone.now, verbose_name="زمان انتشار")
    created = models.DateTimeField(auto_now_add=True, verbose_name="زمان ثبت")
    updated = models.DateTimeField(auto_now=True, verbose_name="زمان ویرایش")
    meta_title = models.CharField(max_length=65, null=True, blank=True, verbose_name='عنوان سئو صفحه نمایش این مقاله (title)')
    meta_description = models.CharField(max_length=160, null=True, blank=True, verbose_name='توضیحات سئو صفحه نمایش این مقاله (description)')

    class Meta:
        verbose_name = "مقاله"
        verbose_name_plural = "سایر مقالات"

    def __str__(self):
        return self.title

    def jalali_created(self):
        return jalali_converter(self.created)

    def jalali_updates(self):
        return jalali_converter(self.updated)

    def jalali_published(self):
        return jalali_converter(self.published)

    def view_count(self):
        return self.view.count()

    jalali_created.short_description = "زمان ثبت"
    jalali_updates.short_description = "زمان ویرایش"
    jalali_published.short_description = "زمان انتشار"
    view_count.short_description = "تعداد بازدید"


class News(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=250, verbose_name="عنوان")
    link = models.SlugField(max_length=250, null=True, unique=True, allow_unicode=True, db_collation='utf8_persian_ci', verbose_name="لینک")
    abstract = models.TextField(null=True, verbose_name="چکیده")
    image = models.ImageField(upload_to=news, null=True, blank=True, verbose_name="تصویر اصلی")
    content = RichTextUploadingField(null=True, blank=True, verbose_name="محتوا")
    view = models.ManyToManyField(IPAddress, blank=True, related_name="news_view", verbose_name="تعداد بازدید",
                                  editable=False)
    author = models.CharField(max_length=250, null=True, blank=True, verbose_name="نویسنده")
    published = models.DateTimeField(default=timezone.now, verbose_name="زمان انتشار")
    created = models.DateTimeField(auto_now_add=True, verbose_name="زمان ثبت")
    updated = models.DateTimeField(auto_now=True, verbose_name="زمان ویرایش")
    meta_title = models.CharField(max_length=65, null=True, blank=True, verbose_name='عنوان سئو صفحه نمایش این مقاله (title)')
    meta_description = models.CharField(max_length=160, null=True, blank=True, verbose_name='توضیحات سئو صفحه نمایش این مقاله (description)')

    class Meta:
        verbose_name = "خبر"
        verbose_name_plural = "اخبار"

    def __str__(self):
        return self.title

    def jalali_created(self):
        return jalali_converter(self.created)

    def jalali_updates(self):
        return jalali_converter(self.updated)

    def jalali_published(self):
        return jalali_converter(self.published)

    def view_count(self):
        return self.view.count()

    jalali_created.short_description = "زمان ثبت"
    jalali_updates.short_description = "زمان ویرایش"
    jalali_published.short_description = "زمان انتشار"
    view_count.short_description = "تعداد بازدید"
