/*
 * Copyright (C) 2017 Centro de Computacao Cientifica e Software Livre
 * Departamento de Informatica - Universidade Federal do Parana
 *
 * This file is part of blendb.
 *
 * blendb is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * blendb is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with blendb.  If not, see <http://www.gnu.org/licenses/>.
 */

import { Engine } from "../../core/engine";
import { ParsedConfig } from "../../util/configParser";
import { Middleware } from "../types";

export function EngineMw (config: ParsedConfig): Middleware {
    let engine: Engine = new  Engine();

    config.metrics.forEach ((met) => engine.addMetric(met));
    config.dimensions.forEach ((dim) => engine.addDimension(dim));
    config.views.forEach ((view) => engine.addView(view));
    config.enumTypes.forEach ((enumt) => engine.addEnumType(enumt));

    return function engineMiddleware(req, res, next) {
        req.engine = engine;
        next();
    };
}