const processor = require('posthtml-svg-mode');
const renameId = require('posthtml-rename-id');
const normalizeViewBox = require('./transformations/normalize-viewbox');
const rasterToSVG = require('./transformations/raster-to-svg');
const prefixStyleSelectors = require('./transformations/prefix-style-selectors');
const svgToSymbol = require('./transformations/svg-to-symbol');

/**
 * @param {Object} options
 * @param {string} [options.id]
 * @param {string} options.content
 * @param {FileRequest} options.request
 * @return {Promise<PostHTMLProcessingResult>}
 */
function symbolFactory(options) {
  const { id } = options;
  const plugins = [];

  // convert raster image to svg
  const content = Buffer.isBuffer(options.content)
    ? rasterToSVG(options.content)
    : options.content;

  plugins.push(normalizeViewBox());
  plugins.push(prefixStyleSelectors(`#${id}`));
  plugins.push(renameId(`${id}_[id]`));
  plugins.push(svgToSymbol({ id }));

  return processor(plugins).process(content);
}

module.exports = symbolFactory;