var Prism = require('prismjs');
var languages = require('prism-languages');
var path = require('path');

var prismCSS = require.resolve('prismjs/themes/prism.css');

var DEFAULT_LANGUAGE = 'markup';
var MAP_LANGUAGES = {
  'py': 'python',
  'js': 'javascript',
  'json': 'javascript',
  'rb': 'ruby',
  'csharp': 'cs',
  'html': 'markup'
};

var assets = {
  assets: path.dirname(prismCSS),
  css: [path.basename(prismCSS)]
};

module.exports = {
  book: assets,
  ebook: assets,
  blocks: {
    code: function(block) {
      var highlighted = '';

      // Normalize language id
      var lang = block.kwargs.language || DEFAULT_LANGUAGE;
      lang = MAP_LANGUAGES[lang] || lang;
      if (!languages[lang]) lang = DEFAULT_LANGUAGE;

      // Check against html, prism "markup" works for this
      if (lang === 'html') {
        lang = 'markup';
      }

      try {
        // The process can fail (failed to parse)
        highlighted = Prism.highlight(block.body, languages[lang]);
      } catch(e) {
        console.warn('Failed to highlight:');
        console.warn(e);
        highlighted = block.body;
      }

      return highlighted;
    }
  }
};