'use strict';

var PSQL = require('cartodb-psql');

function PgQueryRunner(pgConnection) {
    this.pgConnection = pgConnection;
}

module.exports = PgQueryRunner;

/**
 * Runs `query` with `username`'s PostgreSQL role, callback receives error and rows array.
 *
 * @param {String} username
 * @param {String} query
 * @param {Function} callback function({Error}, {Array}) second argument is guaranteed to be an array
 */
PgQueryRunner.prototype.run = function(username, query, callback) {

    this.pgConnection.getDatabaseParams(username, (err, databaseParams) => {
        if (err) {
            return callback(err);
        }

        const psql = new PSQL({
            user: databaseParams.dbuser,
            pass: databaseParams.dbpass,
            host: databaseParams.dbhost,
            port: databaseParams.dbport,
            dbname: databaseParams.dbname
        });

        psql.query(query, function (err, resultSet) {
            resultSet = resultSet || {};
            return callback(err, resultSet.rows || []);
        });
    });
};
