/* Copyright 2021 Mozilla Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

const converters = {
  pt: x => x,
  cm: x => Math.round((x / 2.54) * 72),
  mm: x => Math.round((x / (10 * 2.54)) * 72),
  in: x => Math.round(x * 72),
};

function measureToString(m) {
  const conv = converters[m.unit];
  if (conv) {
    return `${conv(m.value)}px`;
  }
  return `${m.value}${m.unit}`;
}

function setWidthHeight(node, style) {
  if (node.w) {
    style.width = measureToString(node.w);
  } else {
    if (node.maxW && node.maxW.value > 0) {
      style.maxWidth = measureToString(node.maxW);
    }
    if (node.minW && node.minW.value > 0) {
      style.minWidth = measureToString(node.minW);
    }
  }

  if (node.h) {
    style.height = measureToString(node.h);
  } else {
    if (node.maxH && node.maxH.value > 0) {
      style.maxHeight = measureToString(node.maxH);
    }
    if (node.minH && node.minH.value > 0) {
      style.minHeight = measureToString(node.minH);
    }
  }
}

function setPosition(node, style) {
  style.transform = "";
  if (node.rotate) {
    style.transform = `rotate(-${node.rotate}deg) `;
    style.transformOrigin = "top left";
  }

  if (node.x !== "" || node.y !== "") {
    style.position = "absolute";
    style.left = node.x ? measureToString(node.x) : "0pt";
    style.top = node.y ? measureToString(node.y) : "0pt";
  }
}

export { measureToString, setPosition, setWidthHeight };