// metaRoutes.js

function metaRoutes(app, { version, config, isServiceReady, metricsEndpoint }, routeOptions = {}) {
  // Default options with all routes enabled
  const defaults = {
    enableVersion: true,
    enableConfig: true,
    enableHealth: true,
    enableReady: true,
    enableMetrics: true,
  };

  // Merge user provided options with defaults
  const options = { ...defaults, ...routeOptions };

  if (options.enableVersion) {
    app.get('/_version', function (req, res) {
      res.send(version);
    });
  }

  if (options.enableConfig) {
    app.get('/_config', function (req, res) {
      res.send(config._show());
    });
  }

  if (options.enableHealth) {
    app.get('/_health', function (req, res) {
      res.send('OK');
    });
  }

  if (options.enableReady) {
    app.get('/_ready', function (req, res) {
      if (isServiceReady()) {
        res.send('OK');
      } else {
        res.status(503).send('Not ready');
      }
    });
  }

  if (options.enableMetrics) {
    app.get('/_metrics', metricsEndpoint);
  }
}

module.exports = metaRoutes;
/**
   * GET /_version
   * @summary Returns the version of the service
   * @tags meta
   * @return {string} 200 - The version of the service
   */
  /**
   * GET /_config
   * @summary Returns the configuration of the service with redacted secrets
   * @tags meta
   * @return {object} 200 - The configuration of the service
   */
  /**
   * GET /_health
   * @summary Returns the health of the service
   * @description This endpoint is used to check if the service is healthy and should always return 200
   * @tags meta
   * @return {string} 200 - OK
   */
  /**
   * GET /_ready
   * @summary Returns the readiness of the service
   * @description This endpoint is used to check if the service is ready and should return 200 if the service is ready to serve requests
   * @tags meta
   * @return {string} 200 - OK
   * @return {string} 503 - Service Unavailable
   */