/**
 * services.ts — request-scoped service bundle middleware.
 *
 * Spec 03 — request-scoped service bundle.
 *
 * Attaches `locals.services` to every request. Runs after csrfMiddleware so
 * all preceding middleware (session, locale, CSRF) have already populated
 * locals before any handler can access services.
 *
 * The bundle is constructed lazily per-request: capability flags are set
 * eagerly, but actual client construction is deferred to first use.
 */

import type { MiddlewareNext } from 'astro';
import type { APIContext } from 'astro';
import { buildServices } from '@/server/services/bundle.js';
import { env } from '@/server/env.js';

export async function servicesMiddleware(
  context: APIContext,
  next: MiddlewareNext,
): Promise<Response> {
  context.locals.services = await buildServices(env, context.request);
  return next();
}
