from datetime import date, datetime

from sqlalchemy import Date, DateTime, Integer, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column

from db import Base


class TavolletNyilvantartas(Base):
  """Stores app and calendar absences in one source-aware ledger."""

  __tablename__ = 'tavollet_nyilvantartas'
  __table_args__ = (UniqueConstraint('source',
                                     'source_id',
                                     'azonosito',
                                     'datum',
                                     name='uq_tavollet_source_day'), )

  id: Mapped[int] = mapped_column(Integer,
                                  primary_key=True,
                                  autoincrement=True)
  azonosito: Mapped[int] = mapped_column(Integer)
  datum: Mapped[date] = mapped_column(Date)
  minutes: Mapped[int] = mapped_column(Integer)
  absence_type: Mapped[str] = mapped_column(String(45))
  source: Mapped[str] = mapped_column(String(45))
  source_id: Mapped[str] = mapped_column(String(255))
  summary: Mapped[str] = mapped_column(String(255), nullable=True)
  status: Mapped[str] = mapped_column(String(45), default='active')
  match_status: Mapped[str] = mapped_column(String(45), default='matched')
  created_at: Mapped[datetime] = mapped_column(DateTime,
                                               default=datetime.utcnow)
  updated_at: Mapped[datetime] = mapped_column(DateTime,
                                               default=datetime.utcnow,
                                               onupdate=datetime.utcnow)
