/**
 * Module Name: Admin
 * Description: Set of commands which only one who is a DepressionBot
 * administrator can run.
 */
var fs = require('fs'),
    _ = require('underscore')._;

var admin = function(dbot) {
    this.internalAPI = {
        'getCurrentConfig': function(configKey, callback) {
            var configPath = dbot.config;
            configKey = configKey.split('.');  

            for(var i=0;i<configKey.length;i++) {
                if(_.has(configPath, configKey[i])) {
                    configPath = configPath[configKey[i]]; 
                } else {
                    configPath = null;
                    break;
                }
            }

            callback(configPath);
        },

        'setConfig': function(configKey, newOption, callback) {
            var configPath = dbot.customConfig,
                oldOption = null;
            configKey = configKey.split('.');

            for(var i=0;i<configKey.length-1;i++) {
                if(!_.has(configPath, configKey[i])) {
                    configPath[configKey[i]] = {};
                }
                configPath = configPath[configKey[i]];
            }

            if(_.has(configPath, configKey[i])) {
                oldOption = configPath[configKey[i]];
            }
            configPath[configKey[i]] = newOption;
            
            this.internalAPI.saveConfig();
            dbot.reloadModules();
            callback(null, oldOption);
        }.bind(this),

        'saveConfig': function() {
            var config = dbot.customConfig;
            fs.writeFileSync('config.json', JSON.stringify(config, null, '    '));
        }
    };
};

exports.fetch = function(dbot) {
    return new admin(dbot);
};