from datetime import datetime

from sqlalchemy import JSON, TIMESTAMP, ForeignKey, Index, Integer, func
from sqlalchemy.orm import Mapped, mapped_column

from vmk_data_collector.db.base import Base


class PropertySnapshot(Base):
    __tablename__ = "property_snapshots"

    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    property_id: Mapped[int] = mapped_column(
        ForeignKey("property_listings.id", ondelete="CASCADE"), nullable=False
    )
    snapshot_data: Mapped[dict] = mapped_column(JSON, default=dict)
    changed_fields: Mapped[dict] = mapped_column(JSON, default=dict)
    created_at: Mapped[datetime] = mapped_column(
        TIMESTAMP(timezone=True), server_default=func.now()
    )

    __table_args__ = (Index("ix_property_snapshots_property_id", "property_id"),)
