"""SQLAlchemy model for the 'states' table in the Home Assistant PostgreSQL database."""

from sqlalchemy import (
    Column,
    BigInteger,
    CHAR,
    String,
    SmallInteger,
    TIMESTAMP,
    Float,
    LargeBinary,
    ForeignKey,
)

from .base import Base


class States(Base):
    """SQLAlchemy model for the 'states' table."""

    __tablename__ = "states"
    __table_args__ = {"schema": "public"}

    state_id = Column(BigInteger, primary_key=True, autoincrement=True)
    entity_id = Column(CHAR(1), nullable=True)
    state = Column(String(255), nullable=True)
    attributes = Column(CHAR(1), nullable=True)
    event_id = Column(SmallInteger, nullable=True)
    last_changed = Column(TIMESTAMP(timezone=True), nullable=True)
    last_changed_ts = Column(Float, nullable=True)
    last_reported_ts = Column(Float, nullable=True)
    last_updated = Column(TIMESTAMP(timezone=True), nullable=True)
    last_updated_ts = Column(Float, nullable=True)
    old_state_id = Column(BigInteger, ForeignKey("public.states.state_id"), nullable=True)
    attributes_id = Column(
        BigInteger, ForeignKey("public.state_attributes.attributes_id"), nullable=True
    )
    context_id = Column(CHAR(1), nullable=True)
    context_user_id = Column(CHAR(1), nullable=True)
    context_parent_id = Column(CHAR(1), nullable=True)
    origin_idx = Column(SmallInteger, nullable=True)
    context_id_bin = Column(LargeBinary, nullable=True)
    context_user_id_bin = Column(LargeBinary, nullable=True)
    context_parent_id_bin = Column(LargeBinary, nullable=True)
    metadata_id = Column(BigInteger, ForeignKey("public.states_meta.metadata_id"), nullable=True)
