import mysql from 'mysql2/promise'

/**
 * Pula połączeń MySQL — używana przez warstwę dostępu do danych (np. użytkownicy).
 * Na serwerze ustaw DATABASE_URL; opcjonalnie MYSQL_POOL_LIMIT, MYSQL_SSL.
 */
function createPool(): mysql.Pool {
  const uri = process.env.DATABASE_URL
  if (!uri || uri.trim() === '') {
    throw new Error('Brak zmiennej środowiskowej DATABASE_URL (connection string MySQL).')
  }

  const limit = Math.min(50, Math.max(2, Number(process.env.MYSQL_POOL_LIMIT ?? 10) || 10))
  const useSsl = process.env.MYSQL_SSL === '1' || process.env.MYSQL_SSL === 'true'

  return mysql.createPool({
    uri,
    waitForConnections: true,
    connectionLimit: limit,
    queueLimit: 0,
    enableKeepAlive: true,
    keepAliveInitialDelay: 0,
    ...(useSsl ? { ssl: { rejectUnauthorized: true } } : {}),
  })
}

const globalForDb = globalThis as unknown as { mysqlPool: mysql.Pool | undefined }

/** Lazy init — pozwala na `next build` bez DATABASE_URL w środowisku budowania. */
export function getPool(): mysql.Pool {
  if (!globalForDb.mysqlPool) {
    globalForDb.mysqlPool = createPool()
  }
  return globalForDb.mysqlPool
}
