import uuid
from django.db import models
from django.utils.translation import gettext_lazy as _
from developer.models import Developer
from geo_location.models import City, Country
from main.fields import WEBPField
# Create your models here.

class OneNewHomesData(models.Model):
    
    data = models.TextField(_("data"))
    json_data = models.JSONField(_("json data"), null=True, blank=True)
    total = models.IntegerField(_("total"))
    page = models.IntegerField(_("page"))
    pages = models.IntegerField(_("all page"))
    base_url = models.CharField(_("base url"), max_length=255, null=True, blank=True)
    is_checked = models.BooleanField(_("checked"), default=False)
    last_check = models.FloatField(_("last check"), default=0)
    json_data_checked = models.BooleanField(_("json data checked"), default=False)
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"data page {self.page}"
    
    class Meta:
        verbose_name = _("One New Homes Data")
        verbose_name_plural = _("One New Homes Data")
        ordering = ["-page", "is_checked", "last_check", "id"]
    
class OneNewHomesFilterData(models.Model):
    
    data = models.TextField(_("data"))
    base_url = models.CharField(_("base url"), max_length=255, null=True, blank=True)
    country = models.ForeignKey(Country, verbose_name=_("country"), related_name="one_new_homes_filter_data", on_delete=models.CASCADE, null=True, blank=True)
    city = models.ForeignKey(City, verbose_name=_("city"), related_name="one_new_homes_filter_data", on_delete=models.CASCADE, null=True, blank=True)
    is_checked = models.BooleanField(_("checked"), default=False)
    last_check = models.FloatField(_("last check"), default=0)
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"data page {self.base_url}"
    
    class Meta:
        verbose_name = _("One New Homes Filter Data")
        verbose_name_plural = _("One New Homes Filter Data")
        ordering = ["is_checked", "last_check", "id"]
    
def image_development_folder(instance, filename):
    return f'temp_files/development/{uuid.uuid4().hex}.webp'
    
class OneNewHomesDevelopmentsData(models.Model):
    name = models.CharField(_("name"), max_length=250, blank=True, null=True)
    slug = models.SlugField(_("slug"), max_length=250, unique=True)
    base_url = models.URLField(_("base url"), blank=True, null=True)
    url = models.URLField(_("url"), blank=True, null=True)
    image = WEBPField(_("Image"), upload_to=image_development_folder, default="/blank/3590078.webp")
    image_mobile = WEBPField(_("Image mobile"), upload_to=image_development_folder, default="/blank/3590078.webp", blank=True, null=True)
    builder = models.ForeignKey(Developer, on_delete=models.CASCADE ,verbose_name=_("builder"), blank=True, null=True)
    builder_name = models.CharField(_("builder name"), max_length=250, blank=True, null=True)
    builder_slug = models.SlugField(_("builder slug"), max_length=250, blank=True, null=True)
    address = models.CharField(_("address"), max_length=250, blank=True, null=True)
    
    url_data = models.TextField(_("url data"), blank=True, null=True)
    gallery_data = models.TextField(_("gallery data"), blank=True, null=True)
    
    data_downloaded = models.BooleanField(_("data downloaded"), default=False)
    
    is_checked = models.BooleanField(_("checked"), default=False)
    in_check = models.BooleanField(_("in check"), default=False)
    last_check = models.FloatField(_("last check"), default=0)
    gallery_downloaded = models.BooleanField(_("gallery downloaded"), default=False)
    gallery_check = models.BooleanField(_("gallery check"), default=False)
    gallery_in_check = models.BooleanField(_("gallery in check"), default=False)
    gallery_last_download = models.FloatField(_("gallery last download"), default=0)
    gallery_last_check = models.FloatField(_("gallery last check"), default=0)
    year = models.CharField(_("year"), max_length=250, blank=True, null=True)
    coordinates = models.JSONField(_("coordinates"), blank=True, null=True)
    
    have_error = models.BooleanField(_("have error"), default=False)
    error = models.TextField(_("error"), blank=True, null=True)
    
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"{self.name}"
    
    class Meta:
        verbose_name = _("One New Homes Developments Data")
        verbose_name_plural = _("One New Homes Developments Data")
        ordering = ["is_checked", "last_check", "id"]
    
    
class OneNewHomesDeveloperData(models.Model):
    data = models.TextField(_("data"))
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    class Meta:
        verbose_name = _("One New Homes Developer Data")
        verbose_name_plural = _("One New Homes Developer Data")
        ordering = ["id"]
    
def image_developer_folder(instance, filename):
    return f'temp_files/developer/{uuid.uuid4().hex}.webp'

class OneNewsHomesDeveloper(models.Model):
    name = models.CharField(_("name"), max_length=250, blank=True, null=True)
    slug = models.SlugField(_("slug"), max_length=250, unique=True)
    url = models.URLField(_("url"), blank=True, null=True)
    description = models.TextField(_("description"), blank=True, null=True)
    image = WEBPField(_("Image"), upload_to=image_developer_folder, default="/blank/3590078.webp")
    city = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name=_("city"), related_name="one_new_homes_developer", blank=True, null=True)
    description_check = models.BooleanField(_("description check"), default=False)
    is_checked = models.BooleanField(_("checked"), default=False)
    last_check = models.FloatField(_("last check"), default=0)
    
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"{self.name}"
    
    class Meta:
        verbose_name = _("One New Homes Developer")
        verbose_name_plural = _("One New Homes Developer")
        ordering = ["id"]
    
class OldData(models.Model):
    data = models.JSONField(_("data"))
    is_checked = models.BooleanField(_("checked"), default=False)
    last_check = models.FloatField(_("last check"), default=0)

    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"{self.id}"
    
    class Meta:
        verbose_name = _("Old Data")
        verbose_name_plural = _("Old Data")
        ordering = ["id"]
        
        
class ONHNewsData(models.Model):
    data = models.TextField(_("data"))
    total = models.IntegerField(_("total"))
    page = models.IntegerField(_("page"))
    base_url = models.CharField(_("base url"), max_length=255, null=True, blank=True)
    city = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name=_("city"), related_name="onh_news_data", blank=True, null=True)
    is_checked = models.BooleanField(_("checked"), default=False)
    last_check = models.FloatField(_("last check"), default=0)
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"{self.id}"
    
    class Meta:
        verbose_name = _("ONH News Data")
        verbose_name_plural = _("ONH News Data")
        ordering = ["id"]
    

class ONHNews(models.Model):
    title = models.CharField(_("title"), max_length=250, blank=True, null=True)
    slug = models.SlugField(_("slug"), max_length=250,blank=True, null=True)
    description = models.TextField(_("description"), blank=True, null=True)
    summary = models.TextField(_("summary"), blank=True, null=True)
    group = models.CharField(_("group"), max_length=250, blank=True, null=True)
    date = models.CharField(_("date"), max_length=250, blank=True, null=True)
    city = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name=_("city"), related_name="onh_news", blank=True, null=True)
    image = WEBPField(_("Image"), upload_to="news", blank=True, null=True)
    is_paraphrase = models.BooleanField(_("is paraphrase"), default=False)
    paraphrase_error = models.BooleanField(_("paraphrase error"), default=False)
    url = models.URLField(_("url"), blank=True, null=True)
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)

    def __str__(self):
        return f"{self.title}"

    class Meta:
        verbose_name = _("One New Homes News")
        verbose_name_plural = _("One New Homes News")
        ordering = ["id"]
        constraints = [
            models.UniqueConstraint(fields=['slug', 'url'], name='repeated_news_slug_url'),
        ]
        
class ONHNewsImage(models.Model):
    news = models.ForeignKey(ONHNews, on_delete=models.CASCADE, verbose_name=_("news"), related_name="images")
    image = WEBPField(_("Image"), upload_to="news", blank=True, null=True)
    url = models.URLField(_("url"), blank=True, null=True)
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)

    def __str__(self):
        return f"{self.news.title}"

    class Meta:
        verbose_name = _("One New Homes News Image")
        verbose_name_plural = _("One New Homes News Images")
        ordering = ["id"]
        constraints = [
            models.UniqueConstraint(fields=['news', 'url'], name='repeated_news_image_url'),
        ]
    
    
    
        
class ONHArticle(models.Model):
    title = models.CharField(_("title"), max_length=250, blank=True, null=True)
    description = models.TextField(_("description"), blank=True, null=True)
    image = WEBPField(_("Image"), upload_to=image_developer_folder, default="/blank/3590078.webp")
    url = models.URLField(_("url"), blank=True, null=True)
    is_checked = models.BooleanField(_("checked"), default=False)
    last_check = models.FloatField(_("last check"), default=0)
    created_at = models.DateTimeField(_("created at"), auto_now_add=True)
    updated_at = models.DateTimeField(_("updated at"), auto_now=True)
    
    def __str__(self):
        return f"{self.title}"
    
    class Meta:
        verbose_name = _("ONH Article")
        verbose_name_plural = _("ONH Article")
        ordering = ["id"]