from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, sessionmaker

from . import config

if config.DATABASE_URL.startswith("postgresql"):
    _args = {"options": "-c timezone=UTC"}
elif config.DATABASE_URL.startswith("mysql"):
    _args = {"init_command": "SET time_zone='+00:00'"}
else:
    _args = {}
# pool_recycle: shared hosts close idle MySQL connections after a few minutes
# READ COMMITTED everywhere: MySQL defaults to REPEATABLE READ, which would show a request old stock figures.
engine = create_engine(config.DATABASE_URL, pool_pre_ping=True, pool_recycle=280, connect_args=_args,
                       isolation_level="READ COMMITTED")
IS_POSTGRES = engine.dialect.name == "postgresql"
SessionLocal = sessionmaker(engine, expire_on_commit=False)


class Base(DeclarativeBase):
    pass


def get_db():
    with SessionLocal() as db:
        yield db
