/**
 * Module Name: question
 * Description: Ask and answer questions. How delightful
 */
var _ = require('underscore')._;

var question = function(dbot) {
    if(!_.has(dbot.db, 'lastQuestion')) dbot.db.lastQuestion = 0;

    this.commands = {
        '~ask': function(event) {
            var id = dbot.db.lastQuestion;
            var question = {
                'id': id,
                'asker': event.rUser.id,
                'answerer': null,
                'status': false,
                'answer': null
            };
            this.db.save('questions', id, question, function() {
                dbot.db.lastQuestion++; 
                event.reply(dbot.t('q_asked', { 'id': id }));
            });
        },

        '~answer': function(event) {
            var id = event.input[1],
                answer = event.input[2];

            this.db.read('questions', id, function(err, question) {
                if(question) {
                    if(question.status != true) {
                        question.answerer = event.rUser.id;
                        question.answer = answer;
                        this.db.save('questions', question.id, question, function() {
                            event.reply(dbot.t('q_answered', { 'id': id }));  
                        });
                    } else {
                        event.reply(dbot.t('q_alreadyanswered', { 'id': id }));
                    }
                } else {
                    event.reply(dbot.t('q_noexist', { 'id': id }));
                }
            }.bind(this));
        },

        '~question': function(event) {
            var id = event.params[1]; 
            this.db.read('questions', id, function(err, question) {
                if(question) {
                    var response = {
                        'id': id,
                        'question': question.question,
                        'asker': question.asker
                    };
                    if(question.status == true) {
                        event.reply(dbot.t('q_answered', _.extend(response, {
                            'answerer': question.answerer,
                            'answer': question.answer
                        })));
                    } else {
                        event.reply(dbot.t('q_unanswered', response));
                    }
                } else {
                    event.reply(dbot.t('q_noexist', { 'id': id }));
                }
            });
        }
    };
    this.commands['~answer'].regex = [/^~answer ([^ ]+) (.+)$/, 3];
};

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