let currentPromise: Promise<any> | null = null;

export async function getDynamicEnv({ force }: { force?: boolean } = {}): Promise<Record<string, any>> {
  if (currentPromise) {
    return currentPromise;
  }
  if (!force) {
    const storedEnv = window.sessionStorage.getItem('env');
    if (storedEnv) {
      try {
        const envObj = JSON.parse(storedEnv);
        return envObj;
      } catch (err) {
        console.error(err);
      }
    }
  }

  currentPromise = fetchDynamicEnv();
  try {
    const result = await currentPromise;
    return result;
  } finally {
    currentPromise = null;
  }
}

async function fetchDynamicEnv() {
  const apiUrl = new URL('public/env', process.env.API_URL!).toString();
  const dynamicEnv = await fetch(apiUrl).then((response) => response.json());
  if (dynamicEnv) {
    window.sessionStorage.setItem('env', JSON.stringify(dynamicEnv));
    return dynamicEnv;
  }
  console.error('Entorno dinámico no encontrado');
  return {};
}
