const joi = require("@hapi/joi");

export default class AutoRoutePluginCallback {
  private readonly middlewares: any[];

  constructor(middlewares: any[] = []) {
    if (middlewares) {
      joi.assert(middlewares, joi.array().items(
          joi.func()
      ));
    }

    this.middlewares = middlewares;
  }

  buildCallback(route) {
    if (this.middlewares) {
      return this.middlewares.map(middleware => {
            return async (req, res, next) => {
              req.config = {
                route,
              };

              return await middleware(req, res, next);
            };
          },
      );
    }

    return [];
  }
}
