/**
Definition of the HandlebarsGenerator class.
@license MIT. See LICENSE.md for details.
@module handlebars-generator.js
*/



(function() {



  var _ = require('underscore')
    , HANDLEBARS = require('handlebars')
    , FS = require('fs')
    , registerHelpers = require('./handlebars-helpers')
    , PATH = require('path')
    , parsePath = require('parse-filepath')
    , READFILES = require('recursive-readdir-sync')
    , SLASH = require('slash');



  /**
  Perform template-based resume generation using Handlebars.js.
  @class HandlebarsGenerator
  */
  var HandlebarsGenerator = module.exports = {




    generate: function( json, jst, format, cssInfo, opts, theme ) {

      registerPartials( format, theme );
      registerHelpers( theme );

      // Preprocess text
      var encData = json;
      ( format === 'html' || format === 'pdf' ) && (encData = json.markdownify());
      ( format === 'doc' ) && (encData = json.xmlify());

      // Compile and run the Handlebars template.
      var template = HANDLEBARS.compile(jst);
      return template({
        r: encData,
        RAW: json,
        filt: opts.filters,
        cssInfo: cssInfo,
        format: format,
        opts: opts,
        headFragment: opts.headFragment || ''
      });

    }



  };



  function registerPartials(format, theme) {
    if( format !== 'html' && format != 'doc' )
      return;

    // Locate the global partials folder
    var partialsFolder = PATH.join(
      parsePath( require.resolve('fresh-themes') ).dirname,
      '/partials/',
      format
    );

    // Register global partials in the /partials folder
    // TODO: Only do this once per HMR invocation.
    _.each( READFILES( partialsFolder, function(error){ }), function( el ) {
      var pathInfo = parsePath( el );
      var name = SLASH( PATH.relative( partialsFolder, el )
        .replace(/\.html$|\.xml$/, '') );
      if( pathInfo.dirname.endsWith('section') ) {
        name = SLASH(name.replace(/\.html$|\.xml$/, ''));
      }
      var tplData = FS.readFileSync( el, 'utf8' );
      var compiledTemplate = HANDLEBARS.compile( tplData );
      HANDLEBARS.registerPartial( name, compiledTemplate );
      theme.partialsInitialized = true;
    });

    // Register theme-specific partials
    _.each( theme.partials, function( el ) {
      var tplData = FS.readFileSync( el.path, 'utf8' );
      var compiledTemplate = HANDLEBARS.compile( tplData );
      HANDLEBARS.registerPartial( el.name, compiledTemplate );
    });
  }



}());

/**
Definition of the HandlebarsGenerator class.
@license MIT. See LICENSE.md for details.
@module handlebars-generator.js
*/



(function() {



  var _ = require('underscore')
    , HANDLEBARS = require('handlebars')
    , FS = require('fs')
    , registerHelpers = require('./handlebars-helpers')
    , PATH = require('path')
    , parsePath = require('parse-filepath')
    , READFILES = require('recursive-readdir-sync')
    , SLASH = require('slash');



  /**
  Perform template-based resume generation using Handlebars.js.
  @class HandlebarsGenerator
  */
  var HandlebarsGenerator = module.exports = {




    generate: function( json, jst, format, cssInfo, opts, theme ) {

      registerPartials( format, theme );
      registerHelpers( theme );

      // Preprocess text
      var encData = json;
      ( format === 'html' || format === 'pdf' ) && (encData = json.markdownify());
      ( format === 'doc' ) && (encData = json.xmlify());

      // Compile and run the Handlebars template.
      var template = HANDLEBARS.compile(jst);
      return template({
        r: encData,
        RAW: json,
        filt: opts.filters,
        cssInfo: cssInfo,
        format: format,
        opts: opts,
        headFragment: opts.headFragment || ''
      });

    }



  };



  function registerPartials(format, theme) {
    if( format === 'html' || format === 'doc' ) {

      // Locate the global partials folder
      var partialsFolder = PATH.join(
        parsePath( require.resolve('fresh-themes') ).dirname,
        '/partials/',
        format
      );

      // Register global partials in the /partials folder
      // TODO: Only do this once per HMR invocation.
      _.each( READFILES( partialsFolder, function(error){ }), function( el ) {
        var pathInfo = parsePath( el );
        var name = SLASH( PATH.relative( partialsFolder, el )
          .replace(/\.html$|\.xml$/, '') );
        if( pathInfo.dirname.endsWith('section') ) {
          name = SLASH(name.replace(/\.html$|\.xml$/, ''));
        }
        var tplData = FS.readFileSync( el, 'utf8' );
        var compiledTemplate = HANDLEBARS.compile( tplData );
        HANDLEBARS.registerPartial( name, compiledTemplate );
        theme.partialsInitialized = true;
      });

    }

    // Register theme-specific partials
    _.each( theme.partials, function( el ) {
      var tplData = FS.readFileSync( el.path, 'utf8' );
      var compiledTemplate = HANDLEBARS.compile( tplData );
      HANDLEBARS.registerPartial( el.name, compiledTemplate );
    });
  }



}());

load theme partials for non html and doc