from datetime import datetime
from sqlalchemy import DateTime, Integer, Boolean, String, func
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base

class TemporalConfigMixin:
    """
    Mixin to support temporal versioning, active flags, and audit trails.
    Allows queries to resolve configuration records active at any specific timestamp.
    """
    version: Mapped[int] = mapped_column(Integer, default=1, nullable=False)
    is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False)
    effective_from: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=func.now())
    effective_to: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
    
    created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
    updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
    created_by: Mapped[str | None] = mapped_column(String(100), nullable=True)
    updated_by: Mapped[str | None] = mapped_column(String(100), nullable=True)
