/**
* TTL de cache par provider — modèle identique à `SEARCH_CACHE_TTL_MS_
`
* (server/db.mjs) étendu aux caches mémoire de index.mjs.
*
* Priorité : `_` (ex. `DETAILS_CACHE_TTL_MS_YT`) →
* `` (`DETAILS_CACHE_TTL_MS`) → défaut passé par l'appelant.
* Une valeur absente, non numérique ou ≤ 0 est ignorée (jamais de TTL nul
* qui viderait le cache à chaque lecture).
*
* Base volontairement sans suffixe imposé : `TRANSCRIPT_CACHE_TTL` garde son
* nom d'env historique, le suffixe `_YT` s'y ajoute tel quel.
*/
/**
* @param {string} base nom de la variable d'environnement de base
* @param {string} provider id provider ('yt', 'dailymotion', …)
* @param {number} fallback TTL par défaut (ms)
* @returns {number} TTL en ms
*/
export function perProviderTtl(base, provider, fallback) {
const p = String(provider || '').toUpperCase().replace(/[^A-Z0-9]/g, '');
if (p) {
const v = Number(process.env[`${base}_${p}`]);
if (Number.isFinite(v) && v > 0) return v;
}
const g = Number(process.env[base]);
if (Number.isFinite(g) && g > 0) return g;
return fallback;
}