


###### Hously space models ######


from django.db import models




############## IF YOU CHANGE HERE ANYWHING REMEMBER TO CHANGE THAT ALSO IN HOUSLY.CLOUD ##################

class NM_Advertisements_Archive(models.Model):
    id = models.AutoField(primary_key=True) 
    url = models.URLField(max_length=2000, unique=True)    
        
    estate_type = models.CharField(max_length=255, blank=True, null=True)
    offer_type = models.CharField(max_length=20, null=True, blank=True)
    # Informacje główne
    price = models.CharField(max_length=200, null=True, blank=True)
    currency = models.CharField(max_length=200, blank=True, null=True)
    price_per_m2 = models.CharField(max_length=200, null=True, blank=True)
    rent = models.CharField(max_length=255, blank=True, null=True)
    
    title = models.CharField(max_length=500, null=True, blank=True)
    description = models.TextField(max_length=20000, null=True, blank=True)
    address = models.CharField(max_length=500, null=True, blank=True)
    
    square_footage = models.CharField(max_length=200, null=True, blank=True)
    rooms = models.CharField(max_length=200, null=True, blank=True)
    bathrooms = models.CharField(max_length=200, null=True, blank=True)
    
    floor = models.CharField(max_length=200, null=True, blank=True)
    floors_num = models.CharField(max_length=200, null=True, blank=True)      
    
    estate_condition = models.CharField(max_length=255, null=True, blank=True)
    heating_type = models.CharField(max_length=200, null=True, blank=True)
    # Dla domów
    land_area = models.CharField(max_length=200, null=True, blank=True)
    building_type = models.CharField(max_length=200, null=True, blank=True)  
    energy_certificate = models.CharField(max_length=200, null=True, blank=True)
    # tabela Informacje dodatkowe
    market_type = models.CharField(max_length=200, null=True, blank=True)
    build_year = models.CharField(max_length=200, null=True, blank=True)    



def save(self, *args, **kwargs):
    # Zapis głównego modelu, jeśli jeszcze nie istnieje
    if not self.pk:
        super().save(*args, **kwargs)

    # Sprawdzanie i tworzenie każdego powiązanego modelu osobno
    if not NM_BoolFields_Archive.objects.filter(advertisement=self).exists():
        NM_BoolFields_Archive.objects.create(advertisement=self)

    if not NM_OfferData_Archive.objects.filter(advertisement=self).exists():
        NM_OfferData_Archive.objects.create(advertisement=self)

    if not NM_AddtionalInfo_Archive.objects.filter(advertisement=self).exists():
        NM_AddtionalInfo_Archive.objects.create(advertisement=self)

    if not NM_OfferDetailAddress_Archive.objects.filter(advertisement=self).exists():
        NM_OfferDetailAddress_Archive.objects.create(advertisement=self)

    if not NM_OfferImages_Archive.objects.filter(advertisement=self).exists():
        NM_OfferImages_Archive.objects.create(advertisement=self)

    if not NM_Offerer_Archive.objects.filter(advertisement=self).exists():
        NM_Offerer_Archive.objects.create(advertisement=self)

    if not NM_OffererPhone_Archive.objects.filter(advertisement=self).exists():
        NM_OffererPhone_Archive.objects.create(advertisement=self)

    if not NM_ListingCounter_Archive.objects.filter(advertisement=self).exists():
        NM_ListingCounter_Archive.objects.create(advertisement=self)

    if not NM_SpaceDataManagment_Archive.objects.filter(advertisement=self).exists():
        NM_SpaceDataManagment_Archive.objects.create(advertisement=self)

    # Ponowny zapis głównego modelu, jeśli zmieniono jakieś dane
    super().save(*args, **kwargs)

        
        
    
class NM_BoolFields_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='bool_fields_nm_archive',
        primary_key=True
    )
    elevator = models.BooleanField(null=True, blank=True)
    media = models.CharField(max_length=500, null=True, blank=True)
    electricity = models.BooleanField(null=True, blank=True)
    water = models.BooleanField(null=True, blank=True)
    gas = models.BooleanField(null=True, blank=True)
    phone = models.BooleanField(null=True, blank=True)
    internet = models.BooleanField(null=True, blank=True)
    sewerage = models.BooleanField(null=True, blank=True) #kanalizacja
    equipment = models.BooleanField(null=True, blank=True)
    garden = models.BooleanField(null=True, blank=True)
    garage = models.BooleanField(null=True, blank=True)
    basement = models.BooleanField(null=True, blank=True)
    attic = models.BooleanField(null=True, blank=True)
    terrace = models.BooleanField(null=True, blank=True)
    seprete_kitchen = models.BooleanField(null=True, blank=True)
    
    balcony = models.CharField(max_length=255, null=True, blank=True)
    parking_space = models.CharField(max_length=200, null=True, blank=True)
    
    
    
class NM_OfferData_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='offer_data_nm_archive',
        primary_key=True
    )
    site_id = models.CharField(max_length=250, blank=True)    
    # inne
    land_and_mortgage_register = models.CharField(max_length=255, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    ownership_form = models.CharField(max_length=200, null=True, blank=True)
    available_from = models.CharField(max_length=200, null=True, blank=True)
       

class NM_AddtionalInfo_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='additional_info_nm_archive',
        primary_key=True
    )
    windows = models.CharField(max_length=200, null=True, blank=True)    
    attic_type = models.CharField(max_length=200, null=True, blank=True)  # Poddasze
    building_material = models.CharField(max_length=200, null=True, blank=True)   
    security = models.CharField(max_length=500, null=True, blank=True)
    # Dla działek
    fencing = models.CharField(max_length=200, null=True, blank=True)
    access_road = models.CharField(max_length=200, null=True, blank=True)
    location = models.CharField(max_length=1000, null=True, blank=True)
    plot_type = models.CharField(max_length=200, null=True, blank=True)
    dimensions = models.CharField(max_length=200, null=True, blank=True)
    # Dla lokali użytkowych
    premises_location = models.CharField(max_length=200, null=True, blank=True)
    purpose = models.CharField(max_length=200, null=True, blank=True)
    # Dla domów
    location_info = models.CharField(max_length=200, null=True, blank=True)  # Położenie
    roof = models.CharField(max_length=200, null=True, blank=True)
    recreational_house = models.CharField(max_length=200, null=True, blank=True)
    roof_covering = models.CharField(max_length=200, null=True, blank=True)
    # Dla hal i magazynów
    construction = models.CharField(max_length=200, null=True, blank=True)
    height = models.CharField(max_length=200, null=True, blank=True)
    office_rooms = models.CharField(max_length=200, null=True, blank=True)
    social_facilities = models.CharField(max_length=200, null=True, blank=True)
    parking = models.CharField(max_length=200, null=True, blank=True)
    ramp = models.CharField(max_length=200, null=True, blank=True)
    floor_material = models.CharField(max_length=200, null=True, blank=True)  # Posadzka
    # Dla garaży
    lighting = models.CharField(max_length=200, null=True, blank=True)
    
    
class NM_OfferDetailAddress_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='offer_detail_adrress_nm_archive',
        primary_key=True
    )
    country = models.CharField(max_length=50, null=True, blank=True)            #kraj 
    state = models.CharField(max_length=100, null=True, blank=True)             #województwo
    province = models.CharField(max_length=100, null=True, blank=True)          #powiat
    commune = models.CharField(max_length=100, null=True, blank=True)           #gmina
    
    city = models.CharField(max_length=100, null=True, blank=True)              #miasto
    district = models.CharField(max_length=100, null=True, blank=True)          #dzielnica
    street = models.CharField(max_length=100, null=True, blank=True)            #ulica
    
    housing_estate = models.CharField(max_length=100, null=True, blank=True)    #osiedle
    zipcode = models.CharField(max_length=255, blank=True, null=True)           #kod pocztowy 
    
    neighborhood = models.CharField(max_length=200, null=True, blank=True)      # Okolica
    
    lon = models.CharField(max_length=10,null=True, blank=True)
    lat = models.CharField(max_length=10,null=True, blank=True)
    
    
    
class NM_OfferImages_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='offer_images_nm_archive',
        primary_key=True
    )
    original_image_urls = models.JSONField(null=True, blank=True)  # Przechowuje listę oryginalnych URL-i obrazów
    images = models.JSONField(null=True, blank=True)  # Przechowuje listę ścieżek do pobranych obrazów

class NM_Offerer_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='offerer_nm_archive',
        primary_key=True
    )
    # Advertiser info
    advertiser_name = models.CharField(max_length=255, null=True, blank=True)
    advertiser_type = models.CharField(max_length=200, null=True, blank=True)
    remote_service = models.CharField(max_length=255, null=True, blank=True)
    
class NM_OffererPhone_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='offerer_phone_nm_archive',
        primary_key=True
    )
    advertiser_phone = models.CharField(max_length=200, null=True, blank=True)
    
class NM_ListingCounter_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='listing_counter_nm_archive',
        primary_key=True
    )
    view_count = models.CharField(max_length=255, blank=True, null=True)
    
class NM_SpaceDataManagment_Archive(models.Model):
    advertisement = models.OneToOneField(
        'NM_Advertisements_Archive',
        on_delete=models.CASCADE,
        related_name='space_data_nm_archive',
        primary_key=True
    )
    is_active = models.BooleanField(default=True)
    inactive_date = models.DateTimeField(null=True, blank=True)
    isSendToMainServer = models.BooleanField(default=False)
    isArchived = models.BooleanField(default=False)
    listing_date = models.DateField(null=True, blank=True)
    
    view_count = models.CharField(max_length=255, blank=True, null=True)    
    isMerged = models.BooleanField(default=False)  # Domyślnie False
    isDetail = models.BooleanField(default=False)
    
     
    