'use strict';

const queryUtils = require('../utils/query-utils');

function OverviewsMetadataBackend(pgQueryRunner) {
    this.pgQueryRunner = pgQueryRunner;
}

module.exports = OverviewsMetadataBackend;

OverviewsMetadataBackend.prototype.getOverviewsMetadata = function (username, sql, callback) {
    // FIXME: Currently using internal function _cdb_schema_name
    //        CDB_Overviews should provide the schema information directly.
    const query = `
      SELECT *, _cdb_schema_name(base_table)
        FROM CDB_Overviews(
            CDB_QueryTablesText($windshaft$${queryUtils.substituteDummyTokens(sql)}$windshaft$)
        );
    `;
    this.pgQueryRunner.run(username, query, function handleOverviewsRows(err, rows) {
        if (err){
            callback(err);
            return;
        }
        var metadata = rows.reduce(function(metadata, row){
            var table = row.base_table;
            var schema = row._cdb_schema_name;
            if ( !metadata[table] ) {
                metadata[table] = {};
            }
            metadata[table][row.z] = { table: row.overview_table };
            metadata[table].schema = schema;
            return metadata;
        }, {});
        return callback(null, metadata);
    });
};
