type CursorMatch = [tokenStart: number | null, token: string | null];

const textAtCursorMatchesToken = (
  str: string,
  caretPosition: number,
  searchTokens: string[],
): CursorMatch => {
  let word;

  const left = str.slice(0, caretPosition).search(/\S+$/);
  const right = str.slice(caretPosition).search(/\s/);

  if (right < 0) {
    word = str.slice(left);
  } else {
    word = str.slice(left, right + caretPosition);
  }

  if (!word || word.trim().length < 3 || !searchTokens.includes(word[0])) {
    return [null, null];
  }

  word = word.trim().toLowerCase();

  if (word.length > 0) {
    return [left + 1, word];
  } else {
    return [null, null];
  }
};

export { textAtCursorMatchesToken };
