"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.normalizeGridColumnRow = exports.normalizeGridColumnRowGap = exports.normalizeGridAutoFlow = void 0;

var _joinGridValue = _interopRequireDefault(require("../lib/joinGridValue"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const normalizeGridAutoFlow = gridAutoFlow => {
  let newValue = {
    front: '',
    back: ''
  };
  let shouldNormalize = false;
  gridAutoFlow.walk(node => {
    if (node.value === 'dense') {
      shouldNormalize = true;
      newValue.back = node.value;
    } else if (['row', 'column'].includes(node.value.trim().toLowerCase())) {
      shouldNormalize = true;
      newValue.front = node.value;
    } else {
      shouldNormalize = false;
    }
  });

  if (shouldNormalize) {
    return `${newValue.front.trim()} ${newValue.back.trim()}`;
  }

  return gridAutoFlow;
};

exports.normalizeGridAutoFlow = normalizeGridAutoFlow;

const normalizeGridColumnRowGap = gridGap => {
  let newValue = {
    front: '',
    back: ''
  };
  let shouldNormalize = false;
  gridGap.walk(node => {
    // console.log(node);
    if (node.value === 'normal') {
      shouldNormalize = true;
      newValue.front = node.value;
    } else {
      newValue.back = `${newValue.back} ${node.value}`;
    }
  });

  if (shouldNormalize) {
    return `${newValue.front.trim()} ${newValue.back.trim()}`;
  }

  return gridGap;
};

exports.normalizeGridColumnRowGap = normalizeGridColumnRowGap;

const normalizeGridColumnRow = grid => {
  // cant do normalization here using node, so copy it as a string
  let gridValue = grid.toString().split('/'); // node -> string value, split ->  " 2 / 3 span " ->  [' 2','3 span ']

  if (gridValue.length > 1) {
    return (0, _joinGridValue.default)(gridValue.map(gridLine => {
      let normalizeValue = {
        front: '',
        back: ''
      };
      gridLine = gridLine.trim(); // '3 span ' -> '3 span'

      gridLine.split(' ').forEach(node => {
        // ['3','span']
        if (node === 'span') {
          normalizeValue.front = node; // span _
        } else {
          normalizeValue.back = `${normalizeValue.back} ${node}`; // _ 3
        }
      });
      return `${normalizeValue.front.trim()} ${normalizeValue.back.trim()}`; // span 3
    }) // returns "2 / span 3"
    );
  } // doing this separating if `/` is not present as while joining('/') , it will add `/` at the end


  return gridValue.map(gridLine => {
    let normalizeValue = {
      front: '',
      back: ''
    };
    gridLine = gridLine.trim();
    gridLine.split(' ').forEach(node => {
      if (node === 'span') {
        normalizeValue.front = node;
      } else {
        normalizeValue.back = `${normalizeValue.back} ${node}`;
      }
    });
    return `${normalizeValue.front.trim()} ${normalizeValue.back.trim()}`;
  });
};

exports.normalizeGridColumnRow = normalizeGridColumnRow;