import mysql from "mysql2/promise";

declare global {
  // eslint-disable-next-line no-var
  var __kumbhPool: mysql.Pool | undefined;
}

export function getPool() {
  if (!global.__kumbhPool) {
    global.__kumbhPool = mysql.createPool({
      host: process.env.DB_HOST,
      port: Number(process.env.DB_PORT || 3306),
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      waitForConnections: true,
      connectionLimit: 10,
      namedPlaceholders: true,
      timezone: "+05:30",
    });
  }
  return global.__kumbhPool;
}

export async function query<T = unknown>(
  sql: string,
  params?: Record<string, unknown> | unknown[],
) {
  const pool = getPool();
  const [rows] = await pool.execute(
    sql,
    // mysql2 typings are strict; named placeholders use plain objects at runtime
    params as never,
  );
  return rows as T;
}
