import sqlalchemy
from szurubooru import config

class QueryCounter(object):
    _query_count = 0

    @staticmethod
    def bump():
        QueryCounter._query_count += 1

    @staticmethod
    def reset():
        QueryCounter._query_count = 0

    @staticmethod
    def get():
        return QueryCounter._query_count

def create_session():
    _engine = sqlalchemy.create_engine(
        '{schema}://{user}:{password}@{host}:{port}/{name}'.format(
            schema=config.config['database']['schema'],
            user=config.config['database']['user'],
            password=config.config['database']['pass'],
            host=config.config['database']['host'],
            port=config.config['database']['port'],
            name=config.config['database']['name']))
    sqlalchemy.event.listen(
        _engine, 'after_execute', lambda *args: QueryCounter.bump())
    _session_maker = sqlalchemy.orm.sessionmaker(bind=_engine)
    return sqlalchemy.orm.scoped_session(_session_maker)

# pylint: disable=invalid-name
session = create_session()
reset_query_count = QueryCounter.reset
get_query_count = QueryCounter.get