'use strict';

const dataviews = require('./');

module.exports = class DataviewFactory {
    static get dataviews() {
        return Object.keys(dataviews).reduce((allDataviews, dataviewClassName) => {
            allDataviews[dataviewClassName.toLowerCase()] = dataviews[dataviewClassName];
            return allDataviews;
        }, {});
    }

    static getDataview (query, dataviewDefinition) {
        const { type, options, sql } = dataviewDefinition;

        if (!this.dataviews[type]) {
            throw new Error('Invalid dataview type: "' + type + '"');
        }

        return new this.dataviews[type](query, options, sql);
    }
};
