# /opt/service_finder/backend/app/models/history.py

from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, JSON, Date, Text
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.db.base import Base

# --- 1. Jármű Birtoklási Előzmények (Ownership History) ---
# Ez a tábla mondja meg, kié volt az autó egy adott időpillanatban.
# Így biztosítjuk, hogy a régi tulajdonos adatai védve legyenek az újtól.
class VehicleOwnership(Base):
    __tablename__ = "vehicle_ownerships"
    __table_args__ = {"schema": "data"}

    id = Column(Integer, primary_key=True, index=True)
    
    # Kapcsolatok
    vehicle_id = Column(Integer, ForeignKey("data.user_vehicles.id"), nullable=False)
    user_id = Column(Integer, ForeignKey("data.users.id"), nullable=False)
    
    # Időszak
    start_date = Column(Date, nullable=False, default=func.current_date()) # Mikor került hozzá
    end_date = Column(Date, nullable=True) # Ha NULL, akkor ő a jelenlegi tulajdonos!

    # Jegyzet (pl. adásvételi szerződés száma)
    notes = Column(Text, nullable=True)

    # SQLAlchemy kapcsolatok (visszahivatkozások a fő modellekben kellenek majd)
    vehicle = relationship("UserVehicle", back_populates="ownership_history")
    user = relationship("User", back_populates="owned_vehicles")


# --- 2. Audit Log (A "Fekete Doboz") ---
# Minden kritikus módosítást itt tárolunk. Ez a rendszer "igazságügyi naplója".
class AuditLog(Base):
    __tablename__ = "audit_logs"
    __table_args__ = {"schema": "data"}

    id = Column(Integer, primary_key=True, index=True)
    
    # KI? (A felhasználó, aki a műveletet végezte)
    user_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) 
    
    # MIT? (Milyen objektumot érintett?)
    target_type = Column(String, index=True) # pl. "vehicle", "cost", "user_profile"
    target_id = Column(Integer, index=True)  # pl. az autó ID-ja
    
    # HOGYAN?
    action = Column(String, nullable=False) # CREATE, UPDATE, DELETE, LOGIN_FAILED, EXPORT_DATA
    
    # RÉSZLETEK (Mi változott?)
    # Pl: {"field": "odometer", "old_value": 150000, "new_value": 120000} <- Visszatekerés gyanú!
    changes = Column(JSON, nullable=True)
    
    # BIZTONSÁG
    ip_address = Column(String, nullable=True) # Honnan jött a kérés?
    user_agent = Column(String, nullable=True) # Milyen böngészőből?
    
    # MIKOR?
    timestamp = Column(DateTime(timezone=True), server_default=func.now())

    # Kapcsolat (Opcionális, csak ha le akarjuk kérdezni a user adatait a logból)
    user = relationship("User")