# -*- coding: utf-8 -*-
import threading
import mysql.connector.pooling
from bravaorm.utils.log import *

_pools = {}
_lock = threading.Lock()


def configure_pool(pool_name: str, pool_size: int = 10, **connection_config) -> None:
    """Configura o pool globalmente. Chamar uma vez no startup da aplicação."""
    global _pools
    with _lock:
        if pool_name in _pools:
            Debug(f"Pool '{pool_name}' já configurado — ignorando.")
            return
        Debug(f"Configurando pool '{pool_name}' com {pool_size} conexões")
        _pools[pool_name] = mysql.connector.pooling.MySQLConnectionPool(
            pool_name=pool_name,
            pool_size=pool_size,
            **connection_config
        )
        Debug(f"Pool '{pool_name}' pronto")


def get_pool(pool_name: str) -> mysql.connector.pooling.MySQLConnectionPool:
    """Retorna o pool configurado. Lança RuntimeError se não configurado."""
    pool = _pools.get(pool_name)
    if pool is None:
        raise RuntimeError(
            f"Pool '{pool_name}' não configurado. "
            f"Chame configure_pool('{pool_name}', ...) no startup da aplicação."
        )
    return pool


def release_pool(pool_name: str) -> None:
    """Remove a referência ao pool. Conexões ativas retornam ao pool naturalmente."""
    global _pools
    with _lock:
        if pool_name in _pools:
            Debug(f"Liberando pool '{pool_name}'")
            del _pools[pool_name]
