'use strict';

// eslint-disable-next-line no-var
var colorParser = (() => {
  const el = document.createElement('div');
  // https://bugs.webkit.org/show_bug.cgi?id=14563
  document.head.appendChild(el);

  function parseRGB(color) {
    const [r, g, b, a = 1] = color.match(/[.\d]+/g).map(Number);
    return {r, g, b, a};
  }

  function parse(color) {
    el.style.color = color;
    if (el.style.color === '') {
      throw new Error(chrome.i18n.getMessage('styleMetaErrorColor', color));
    }
    color = getComputedStyle(el).color;
    el.style.color = '';
    return parseRGB(color);
  }

  function format({r, g, b, a = 1}) {
    if (a === 1) {
      return `rgb(${r}, ${g}, ${b})`;
    }
    return `rgba(${r}, ${g}, ${b}, ${a})`;
  }

  function formatHex({r, g, b, a = null}) {
    let hex = '#' + (0x1000000 + (r << 16) + (g << 8) + (b | 0)).toString(16).substr(1);
    if (a !== null) {
      hex += (0x100 + Math.floor(a * 255)).toString(16).substr(1);
    }
    return hex;
  }

  return {parse, format, formatHex};
})();