/**
 * Copyright (c) 2015-present, Haltu Oy
 * Released under the MIT license
 * https://github.com/haltu/muuri/blob/master/LICENSE.md
 */

import getStyle from './getStyle';
import transformStyle from './transformStyle';

var translateValue = {};
var transformNone = 'none';
var rxMat3d = /^matrix3d/;
var rxMatTx = /([^,]*,){4}/;
var rxMat3dTx = /([^,]*,){12}/;
var rxNextItem = /[^,]*,/;

/**
 * Returns the element's computed translateX and translateY values as a floats.
 * The returned object is always the same object and updated every time this
 * function is called.
 *
 * @param {HTMLElement} element
 * @returns {Object}
 */
export default function getTranslate(element) {
  translateValue.x = 0;
  translateValue.y = 0;

  var transform = getStyle(element, transformStyle);
  if (!transform || transform === transformNone) {
    return translateValue;
  }

  // Transform style can be in either matrix3d(...) or matrix(...).
  var isMat3d = rxMat3d.test(transform);
  var tX = transform.replace(isMat3d ? rxMat3dTx : rxMatTx, '');
  var tY = tX.replace(rxNextItem, '');

  translateValue.x = parseFloat(tX) || 0;
  translateValue.y = parseFloat(tY) || 0;

  return translateValue;
}
