import { ObjectValue } from "../shared/types";

export default function decodeFlagValues<
  FlagValues extends ObjectValue,
  Flag extends keyof FlagValues & string,
>({
  flagPaths,
  encodedValues,
}: {
  flagPaths: Flag[];
  encodedValues: string;
}): Pick<FlagValues, Flag> {
  const flagValues = JSON.parse(atob(encodedValues)) as Pick<FlagValues, Flag>;
  const missingFlags = flagPaths.filter((flag) => !(flag in flagValues));

  if (missingFlags.length > 0) {
    throw new Error(`Missing flag values for: ${missingFlags.join(", ")}`);
  }

  return flagValues;
}
