/*global desc: true, fail: true, Mustache: true, task: true */
// see: https://github.com/mde/jake

desc('Updating package.json revision.');
task('default', [], function(params) {
    /*jshint evil: true */
    var fs = require('fs');

    // import the Mustache template tool
    eval(fs.readFileSync('Jake/lib/mustache.js', 'utf8'));

    var templates = {
        packagejson : fs.readFileSync('Jake/templates/package.json.tmpl', 'utf8')
    };

    var metadata = {
        appname : 'jsdoc',
        appversion : '3.2.0-dev',
        timestamp : '' + new Date().getTime()
    };

    var outdir = './';

    var rendered = Mustache.to_html(templates.packagejson, metadata);

    fs.writeFileSync(outdir + 'package.json', rendered, 'utf8');

    process.exit(0);

});

desc('Installs a plugin/template.');
task('install', [], function(loc) {
    var fs = require('fs'),
        util = require('util'),
        path = require('path'),
        wrench = require('wrench');

    if(!loc) {
        fail("You must specify the location of the plugin/template.");
    }

    if(!fs.existsSync(loc)) {
        fail("plugin/template location [" + loc + "] is not valid.");
    }

    var pluginLoc = path.join(loc, "plugins"),
        templateLoc = path.join(loc, "templates"),
        jsdocLoc = process.cwd(),
        name,
        config;

    //First the plugin
    if(fs.existsSync(pluginLoc)) {
        //copy it over
        wrench.copyDirSyncRecursive(pluginLoc, path.join(jsdocLoc, "plugins"), {
            preserve : true
        });
        //find out what it's called
        name = fs.readdirSync(pluginLoc)[0].replace(".js", "");
        //And finally edit the conf.json
        try {
            config = JSON.parse(fs.readFileSync(path.join(jsdocLoc, 'conf.json'), 'utf8'));
            if(config.plugins.indexOf('plugins/' + name) == -1) {
                config.plugins.push('plugins/' + name);
                fs.writeFileSync(path.join(jsdocLoc, 'conf.json'), JSON.stringify(config, null, "    "), 'utf8');
            }
        } catch (e) {
            fail("Could not edit the conf.json file: " + e);
        }
    }

    //Then the template
    if(fs.existsSync(templateLoc)) {
        wrench.copyDirSyncRecursive(templateLoc, path.join(jsdocLoc, "templates"), {
            preserve : true
        });
    }

    process.exit(0);

});