from datetime import datetime

from sqlalchemy import DateTime, Integer
from sqlalchemy.orm import declarative_base, Mapped, mapped_column
from text_unidecode import unidecode

from fuware.db.db_setup import SessionLocal

Model = declarative_base()
Model.query = SessionLocal.query_property()

class SqlAlchemyBase(Model):
  __abstract__ = True

  created_at: Mapped[datetime | None] = mapped_column(DateTime, default=datetime.utcnow(), index=True)
  updated_at: Mapped[datetime | None] = mapped_column(DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())

  @classmethod
  def normalize(cls, val: str) -> str:
    return unidecode(val).lower().strip()