"""This module configures and provides the sqlalchemy session factory and base model."""

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

from todo.config import get_settings


s = get_settings()

# The SQL driver is specified by the DSN-prefix below.
_pg_dsn = f"postgresql+psycopg2://{s.pg_user}:{s.pg_password}@{s.pg_hostname}:{s.pg_port}/{s.pg_dbname}"
engine = create_engine(_pg_dsn, echo=s.debug_mode)

# SQLalchemy session factory
SessionLocal = sessionmaker(engine)
# SQLalchemy base model
Base = declarative_base()


def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
