import {VALUE_SPLITTER} from "../constants/patterns";
import {compact, map, split, trim} from "lodash";

export const splitLineText = (lineText: string): Array<string> => {
  if (!lineText || lineText.length < 2) {
    return []
  }

  const separatorIndexes = getIndexesOfCharInText(lineText, '-')
  if (separatorIndexes.length > 0) {
    let sepIndex = separatorIndexes.pop()!
    let decIndex = sepIndex
    while (separatorIndexes.length > 0) {
      decIndex = decIndex - 1

      console.log('sepIndex = ', decIndex, separatorIndexes, lineText, lineText[decIndex], isNumberOrOperator(lineText[decIndex]))

      if (!isNumberOrOperator(lineText[decIndex])) {
        break
      } else if (decIndex === separatorIndexes[separatorIndexes.length - 1]) {
        sepIndex = separatorIndexes.pop()!
      }
    }
    return compact([trim(lineText.slice(0, sepIndex)), trim(lineText.slice(sepIndex + 1))])
  }

  return compact(map(split(lineText, VALUE_SPLITTER), trim))

}

function isNumberOrOperator(char: string) {
  const numberRegex = /^[0-9]$/;
  const operatorRegex = /^[+\-*/()\s]$/;
  return numberRegex.test(char) || operatorRegex.test(char);
}

function getIndexesOfCharInText(text: string, char: string) {

  return Array.from(text).reduce((result, ch, index) => {
    if (ch === char) {
      result.push(index)
    }
    return result
  }, [] as number[])
}