from houslyspace.models import *
from archive.models import *
from django.utils.timezone import now


def move_to_archive(listing_url):
    """Przenosi ogłoszenie i powiązane rekordy do archiwum"""
    try:
        listing = NetworkMonitoringAdvertisements.objects.get(url=listing_url)

        # Kopiowanie danych ogłoszenia do archiwum
        archived_listing = NM_Advertisements_Archive.objects.create(
            original_id=listing.id,
            **{field.name: getattr(listing, field.name) for field in listing._meta.fields if field.name != "url"}
        )

        # Przenoszenie powiązanych danych
        related_models = {
            NetworkMonitoringBoolFields: NM_BoolFields_Archive,
            NetworkMonitoringOfferData: NM_OfferData_Archive,
            NetworkMonitoringAddtionalInfo: NM_AddtionalInfo_Archive,
            NetworkMonitoringOfferDetailAddress: NM_OfferDetailAddress_Archive,
            NetworkMonitoringOfferImages: NM_OfferImages_Archive,
            NetworkMonitoringOfferer: NM_Offerer_Archive,
            NetworkMonitoringOffererPhone: NM_OffererPhone_Archive,
            NetworkMonitoringListingCounter: NM_ListingCounter_Archive,
            NetworkMonitoringSpaceDataManagment: NM_SpaceDataManagment_Archive,
        }

        for model, archive_model in related_models.items():
            related_instances = model.objects.filter(advertisement=listing)
            for instance in related_instances:
                archive_model.objects.create(
                    original_id=instance.id,
                    **{field.name: getattr(instance, field.name) for field in instance._meta.fields if field.name != "id"}
                )

            # Usunięcie oryginalnych danych
            related_instances.delete()

        # Usunięcie oryginalnego ogłoszenia
        listing.delete()

        return {"success": True, "message": "Ogłoszenie przeniesione do archiwum."}

    except NetworkMonitoringAdvertisements.DoesNotExist:
        return {"success": False, "message": "Ogłoszenie nie istnieje."}
    except Exception as e:
        return {"success": False, "message": str(e)}




def move_to_archive_by_id(listing_id):
    """Przenosi ogłoszenie i powiązane rekordy do archiwum"""
    try:
        listing = NetworkMonitoringAdvertisements.objects.get(url=listing_id)

        # Kopiowanie danych ogłoszenia do archiwum
        archived_listing = NM_Advertisements_Archive.objects.create(
            original_id=listing.id,
            **{field.name: getattr(listing, field.name) for field in listing._meta.fields if field.name != "id"}
        )

        # Przenoszenie powiązanych danych
        related_models = {
            NetworkMonitoringBoolFields: NM_BoolFields_Archive,
            NetworkMonitoringOfferData: NM_OfferData_Archive,
            NetworkMonitoringAddtionalInfo: NM_AddtionalInfo_Archive,
            NetworkMonitoringOfferDetailAddress: NM_OfferDetailAddress_Archive,
            NetworkMonitoringOfferImages: NM_OfferImages_Archive,
            NetworkMonitoringOfferer: NM_Offerer_Archive,
            NetworkMonitoringOffererPhone: NM_OffererPhone_Archive,
            NetworkMonitoringListingCounter: NM_ListingCounter_Archive,
            NetworkMonitoringSpaceDataManagment: NM_SpaceDataManagment_Archive,
        }

        for model, archive_model in related_models.items():
            related_instances = model.objects.filter(advertisement=listing)
            for instance in related_instances:
                archive_model.objects.create(
                    original_id=instance.id,
                    **{field.name: getattr(instance, field.name) for field in instance._meta.fields if field.name != "id"}
                )

            # Usunięcie oryginalnych danych
            related_instances.delete()

        # Usunięcie oryginalnego ogłoszenia
        listing.delete()

        return {"success": True, "message": "Ogłoszenie przeniesione do archiwum."}

    except NetworkMonitoringAdvertisements.DoesNotExist:
        return {"success": False, "message": "Ogłoszenie nie istnieje."}
    except Exception as e:
        return {"success": False, "message": str(e)}



