var _ = require('underscore')._;

var profile = function(dbot) {

    this.onLoad = function(){
        var schema = this.config.schema;

        // Ensure all users have a profile
        dbot.api.users.getAllUsers(function(users){
            if(users){ 
                _.each(users, function(user){
                    this.api.getProfileByUUID(user.id, function(err, uuid, profile){
                        // If function returns an error and uuid, create a new profile
                        if(err && uuid){
                            this.api.createProfile(user);
                        }
                    }.bind(this));
                }.bind(this));
            }
        }.bind(this));

        // Add API Hooks
        dbot.api.event.addHook('new_user', this.api.createProfile);

        dbot.instance.addPreEmitHook(function(event, callback) {
            if(!event.rUser) return callback();
            this.api.getProfileByUUID(event.rUser.id, function(uProfile) {
                if(uProfile) {
                    event.rProfile = uProfile.profile;
                    callback();
                }             
            }.bind(this));
        }.bind(this));

        //TODO(@samstudio8) Profile Merging
        //dbot.api.command.addHook('~mergeusers', this.api.mergeProfile);
    };
};

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