import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import { includes } from 'lodash';
import { assetRegExp, codeFolds } from '../../utils/keywords';
var keywords = ['var ', 'let ', 'const ', 'import ', 'export ', 'new '];
/**
 * その text だけを削除したときにコードの健全性が保たれうるかどうか
 * コード全体をパースするのではなく, あくまで行だけを見たときの推測
 * @param {String} text
 * @returns {Boolean} 削除できないとき true
 */

export default function isNotDeletableLine(text) {
  if (text === undefined) return true; // bugfix

  var _arr = ['()', '[]', '{}'];

  for (var _i = 0; _i < _arr.length; _i++) {
    var brackets = _arr[_i];

    var _brackets = _slicedToArray(brackets, 2),
        start = _brackets[0],
        end = _brackets[1];

    if (text.split(start).length !== text.split(end).length) {
      return true; // ブラケットの数が合わなくなるので削除できない
    }
  }

  if (text.split('`').length - 1 % 2 === 1) {
    return true; // テンプレートリテラルの途中なので削除できない
  }

  for (var _i2 = 0; _i2 < keywords.length; _i2++) {
    var declare = keywords[_i2];

    if (includes(text, declare)) {
      return true; // 変数宣言等が含まれるので削除できない
    }
  }

  if (assetRegExp.test(text)) {
    return true; // アセットのボタンなので削除できない
  }

  if (includes(text, codeFolds.startWord)) {
    return true; // "// ここから" があるので削除できない
  }

  if (includes(text, codeFolds.endWord)) {
    return true; // "// ここまで" があるので削除できない
  }

  if (/import ['"].*['"]/.test(text)) {
    return true; // import 文があるので削除できない
  }

  if (includes(text, '/*') !== includes(text, '*/')) {
    return true; // 複数行コメントが終わらなくなるので削除できない
  }

  return false;
}