/*
	Node plugin for figlet.js
*/

var figlet = require('./figlet.js'),
    fs = require('fs'),
    path = require('path'),
    fontDir = path.join(__dirname, '/../fonts/');

/*
    Loads a font into the figlet object.

    Parameters:
    - name (string): Name of the font to load.
    - next (function): Callback function.
*/
figlet.loadFont = function(name, next) {
    if (figlet.figFonts[name]) {
        next(null, figlet.figFonts[name].options);
        return;
    }

    fs.readFile( path.join(fontDir, name + '.flf'),  {encoding: 'utf-8'}, function(err, fontData) {
        if (err) {
            return next(err);
        }

        fontData = fontData + '';
        try {
            next(null, figlet.parseFont(name, fontData));
        } catch(error) {
            next(error);
        }
    });
};

/*
 Loads a font synchronously into the figlet object.

 Parameters:
 - name (string): Name of the font to load.
 */
figlet.loadFontSync = function(name) {
    if (figlet.figFonts[name]) {
        return figlet.figFonts[name].options;
    }

    var fontData = fs.readFileSync( path.join(fontDir, name + '.flf'),  {encoding: 'utf-8'});

    fontData = fontData + '';
    return figlet.parseFont(name, fontData);
};

/*
    Returns an array containing all of the font names
*/
figlet.fonts = function(next) {
    var fontList = [];
    fs.readdir(fontDir, function (err, files) { // '/' denotes the root folder
        if (err) {
            return next(err);
        }

        files.forEach( function (file) {
            if ( /\.flf$/.test(file) ) {
                fontList.push( file.replace(/\.flf$/,'') );
            }
        });

        next(null, fontList);
    });

};

figlet.fontsSync = function() {
    var fontList = [];
    fs.readdirSync(fontDir).forEach(function(file) {
        if ( /\.flf$/.test(file) ) {
            fontList.push( file.replace(/\.flf$/,'') );
        }
    });

    return fontList;
};

module.exports = figlet;
