import { createPool, type Pool } from "mysql2/promise";

let pool: Pool | undefined;

/**
 * Pool MariaDB da aplicação. Só é criado no servidor, na primeira rota que
 * precisar consultar dados. Credenciais vêm exclusivamente do ambiente.
 */
export function getDbPool(): Pool {
  if (pool) return pool;

  const required = ["DATABASE_HOST", "DATABASE_NAME", "DATABASE_USER", "DATABASE_PASSWORD"] as const;
  const missing = required.filter((key) => !process.env[key]);
  if (missing.length) {
    throw new Error(`Configuração de banco incompleta: ${missing.join(", ")}`);
  }

  pool = createPool({
    host: process.env.DATABASE_HOST,
    port: Number(process.env.DATABASE_PORT ?? 3306),
    database: process.env.DATABASE_NAME,
    user: process.env.DATABASE_USER,
    password: process.env.DATABASE_PASSWORD,
    charset: "utf8mb4",
    waitForConnections: true,
    connectionLimit: 10,
    maxIdle: 5,
    idleTimeout: 60_000,
    enableKeepAlive: true,
  });

  return pool;
}
