import stripAnsi from "strip-ansi";

export function removeCWD(str) {
  const isWin = process.platform === "win32";
  let cwd = process.cwd();

  if (isWin) {
    if (str.split("\n").length > 3) {
      // @import '\
      // \
      // \
      // ';

      return stripAnsi(str)
        .replace(/\(from .*?\)/, "(from `replaced original path`)")
        .replace(new RegExp(cwd, "g"), "");
    }

    // eslint-disable-next-line no-param-reassign
    str = str.replace(/\\/g, "/");
    // eslint-disable-next-line no-param-reassign
    cwd = cwd.replace(/\\/g, "/");
  }

  return stripAnsi(str)
    .replace(/\(from .*?\)/, "(from `replaced original path`)")
    .replace(new RegExp(cwd, "g"), "");
}

export default (errors, shortError, type) =>
  errors.map((error) => {
    let errorMessage = error.toString();

    if (shortError) {
      errorMessage = errorMessage.split("\n").slice(0, 2).join("\n");
    }

    if (type === "postcss") {
      errorMessage = errorMessage
        .split("\n")
        .map((str) => {
          if (/^\(/i.test(str)) {
            return removeCWD(str);
          }

          return str;
        })
        .join("\n");
    }

    return removeCWD(errorMessage.split("\n").slice(0, 12).join("\n"));
  });