"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = _default;
const lengthConv = {
  in: 96,
  px: 1,
  pt: 4 / 3,
  pc: 16
};
const timeConv = {
  s: 1000,
  ms: 1
};
const angleConv = {
  turn: 360,
  deg: 1
};

function dropLeadingZero(number) {
  const value = String(number);

  if (number % 1) {
    if (value[0] === '0') {
      return value.slice(1);
    }

    if (value[0] === '-' && value[1] === '0') {
      return '-' + value.slice(2);
    }
  }

  return value;
}

function transform(number, unit, conversion) {
  const lowerCasedUnit = unit.toLowerCase();
  let one, base;
  let convertionUnits = Object.keys(conversion).filter(u => {
    if (conversion[u] === 1) {
      one = u;
    }

    return lowerCasedUnit !== u;
  });

  if (lowerCasedUnit === one) {
    base = number / conversion[lowerCasedUnit];
  } else {
    base = number * conversion[lowerCasedUnit];
  }

  return convertionUnits.map(u => dropLeadingZero(base / conversion[u]) + u).reduce((a, b) => a.length < b.length ? a : b);
}

function _default(number, unit, {
  time,
  length,
  angle
}) {
  let value = dropLeadingZero(number) + (unit ? unit : '');
  let converted;

  if (length !== false && unit.toLowerCase() in lengthConv) {
    converted = transform(number, unit, lengthConv);
  }

  if (time !== false && unit.toLowerCase() in timeConv) {
    converted = transform(number, unit, timeConv);
  }

  if (angle !== false && unit.toLowerCase() in angleConv) {
    converted = transform(number, unit, angleConv);
  }

  if (converted && converted.length < value.length) {
    value = converted;
  }

  return value;
}

module.exports = exports.default;