"""
Provides functions for creation of mysql async and sync sqlalchemy engines
:author Daniil Ossinkin
"""
from src.config import settings
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import create_engine


def get_sync_engine():
    """
    Creates sync database engine for database given by connection string in configs.json
    :return: a sync sqlalchemy database engine
    """
    # get connection string and select python mysql driver
    connection_string = settings.connection_string.replace("mysql://", "mysql+pymysql://")
    return create_engine(connection_string, echo=True)


def get_async_engine():
    """
    Creates async database engine for database given by connection string in configs.json
    :return: a async sqlalchemy database engine
    """
    # get connection string and select async python mysql driver
    connection_string = settings.connection_string.replace("mysql://", "mysql+aiomysql://")
    return create_async_engine(connection_string, echo=False)


"""
Async engine for dependency injection via fast api. 
"""
async_engine = get_async_engine()
