import compact from "lodash/compact";
import uniq from "lodash/uniq";
import { isMasterDsn } from "./isMasterDsn";
import { normalizeDsn } from "./normalizeDsn";
import { promiseAllMap } from "./promiseAllMap";

/**
 * Same as normalizeDsn(), but assumes comma separated list of DSNs. Also,
 * allows passing numbers instead of DSNs; if so, the actual DSN will be chosen
 * by the index from islandDsns argument.
 */
export async function normalizeDsns(
  dsnsIn: string | undefined,
): Promise<string[]> {
  const dsns = uniq(
    compact(dsnsIn?.split(/[,\s]+/s).map((dsn) => normalizeDsn(dsn))),
  );
  const masterDsns = compact(
    await promiseAllMap(dsns, async (dsn) =>
      (await isMasterDsn(dsn)) ? dsn : null,
    ),
  );
  return masterDsns;
}
