import { last, head, isNil, includes, pathOr } from "ramda";

const stripBrackets = (path) => {
  const withoutPrepened = last(path.split("{{"));

  return head(withoutPrepened.split("}}"));
};

const hasValue = (context) => (path) => {
  const pathWithoutBrackets = stripBrackets(path).split(".");
  const value = pathOr(undefined, pathWithoutBrackets, context);

  return !isNil(value);
};

export const getMissingValues = (context, string): string[] => {
  if (!includes("{{", string)) {
    return [];
  }

  const SEARCH_REGEX = new RegExp(/{{.*?}}/g);
  const paths = string.toString().match(SEARCH_REGEX);

  return paths.filter((path) => !hasValue(context)(path));
};

export const isNonInflatedUrl = (url: string): boolean =>
  includes("{{", url) && includes("}}", url);
