const OMIT_PLUSSIGN = /^(?:\+|(-))?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/;
const KEEP_PLUSSIGN = /^([\+\-])?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/;
const unsafeToRemovePlusSignAfter = new Set([
  'Dimension',
  'Hash',
  'Identifier',
  'Number',
  'Raw',
  'UnicodeRange',
]);

export function packNumber(value, item) {
  // omit plus sign only if no prev or prev is safe type
  const regexp =
    (
      item &&
      item.prev !== null &&
      unsafeToRemovePlusSignAfter.has(item.prev.data.type)
    ) ?
      KEEP_PLUSSIGN
    : OMIT_PLUSSIGN;

  // 100 -> '100'
  // 00100 -> '100'
  // +100 -> '100'
  // -100 -> '-100'
  // 0.123 -> '.123'
  // 0.12300 -> '.123'
  // 0.0 -> ''
  // 0 -> ''
  // -0 -> '-'
  value = String(value).replace(regexp, '$1$2$3');

  if (value === '' || value === '-') {
    value = '0';
  }
  // FIXME: is it solution simplier?
  // value = String(Number(value)).replace(/^(-?)0+\./, '$1.');

  return value;
}

export function Number(node) {
  node.value = packNumber(node.value);
}