import { rootFieldName } from "../shared/constants";
import { ObjectValue, Value } from "../shared/types";
import merge from "./merge";

export default function getOverrideFromOverridesList(
  values: [flagPath: string, value: Value | null][]
): ObjectValue | null {
  if (values.length === 0) {
    return null;
  }
  const override = merge<ObjectValue>(
    {},
    ...values.flatMap(([flagPath, value]) => {
      if (value === null) {
        return [];
      }
      const flagPathSteps = flagPath.split(".").reverse();
      const flagName = flagPathSteps.pop()!;

      return [
        {
          [flagName]: flagPathSteps.reduce(
            (current, step) => ({ [step]: current }),
            value
          ),
        },
      ];
    })
  );
  if (Object.keys(override).length === 0) {
    return null;
  }
  if (!(rootFieldName in override)) {
    return { [rootFieldName]: override };
  }
  return override;
}
