controllers/page.js

var promise     = require('bluebird');

var botconfig   = require('../config/botconfig');
var mysql	= require('easy-mysql-promise')(botconfig.database.config);

exports = module.exports = function()
{
    return new Pagectl();
}

/**
 * @constructs Page_Controller
 * @public
 */
function Pagectl(){}

/**
 * Verifies if a given page id is valid
 * @param {String} page_id - The facebook page id
 * @return {Boolean} A boolean response
 */
Pagectl.prototype.isValidPage = function isValidPage(page_id)
{
    return (botconfig.facebook && botconfig.facebook.pages && botconfig.facebook.pages.hasOwnProperty(page_id)) ? true : false;
}

/**
 * Gets the facebook page information and config by a given page id
 * @param {String} page_id - The facebook page id
 * @param {Object} callback_data - An object to be returned to pipe to response
 * @return {PageConfig} A bluebird promise response with a PageConfig object
 */
Pagectl.prototype.getFacebookPageInfo = function getFacebookPageInfo(page_id, callback_data)
{
    var self = this;
    return new promise(function(resolve, reject)
	{
        if(self.isValidPage(page_id))
            resolve({page:{id:page_id, token:botconfig.facebook.pages[page_id].pageToken, language:botconfig.facebook.pages[page_id].language}, data:callback_data});
        else
        {
            var sql = 'SELECT * FROM ' + botconfig.database.pages_table + ' WHERE fb_page_id="'+page_id+'";';

    		mysql.query(sql)
    		.then(function(response)
    		{
                if(response)
                {
                    var token = (response.hasOwnProperty('fb_page_token')) ? response.fb_page_token : false;
                    var language = (response.hasOwnProperty('language')) ? response.language : false;

                    response = {page:{id:response.fb_page_id, token:token , language:language}, data:callback_data};
                }

    			resolve(response);
    		});
        }
    });
}

/**
 * Gets the facebook page token and config by a given page id
 * @param {String} page_id - The facebook page id
 * @param {Object} callback_data - An object to be returned to pipe to response
 * @return {PageConfig} A bluebird promise response with a PageConfig object
 */
Pagectl.prototype.getFacebookPageToken = function getFacebookPageToken(page_id, callback_data)
{
    var self = this;
    return new promise(function(resolve, reject)
	{
        if(Pagectl.prototype.isValidPage(page_id))
            resolve({token:botconfig.facebook.pages[page_id].pageToken, data:callback_data});
        else
        {
            var sql = 'SELECT * FROM ' + botconfig.database.pages_table + ' WHERE fb_page_id="'+page_id+'";';

    		mysql.query(sql)
    		.then(function(response)
    		{
                if(response)
                    response = (response.hasOwnProperty('fb_page_token')) ? response.fb_page_token : false;

    			resolve({page:response, data:callback_data});
    		});
        }
    });
}

/**
 * Gets the facebook page language and config by a given page id
 * @param {String} page_id - The facebook page id
 * @param {Object} callback_data - An object to be returned to pipe to response
 * @return {PageConfig} A bluebird promise response with a PageConfig object
 */
Pagectl.prototype.getFacebookPageLanguage = function getFacebookPageLanguage(page_id, callback_data)
{
    var self = this;
    return new promise(function(resolve, reject)
	{
        if(Pagectl.prototype.isValidPage(page_id))
            resolve({language:botconfig.facebook.pages[page_id].language, data:callback_data});
        else
        {
            var sql = 'SELECT * FROM ' + botconfig.database.pages_table + ' WHERE fb_page_id="'+page_id+'";';

    		mysql.query(sql)
    		.then(function(response)
    		{
                if(response)
                    response = (response.hasOwnProperty('language')) ? response.language : false;;

    			resolve({page:response, data:callback_data});
    		});
        }
    });
}

/**
 * Gets the facebook page id by a given language
 * @param {String} language - The language string - Eg. "en"
 * @return {String} The facebook page id, if any 
 */
Pagectl.prototype.getFacebookPageByLanguage = function getFacebookPageByLanguage(language)
{
    var self = this;
    var page_id = false;

    for(k in botconfig.facebook.pages)
    {
        var page_language = botconfig.facebook.pages[k].language;
        var page_type = botconfig.facebook.pages[k].type;

        if(botconfig.env==page_type && language==page_language)
        {
            page_id = k;
            break;
        }
    }

    return page_id;
}