/**
 * Security Module
 * Agent 4: Production Deployment
 *
 * Central export for security utilities.
 */

export { withSecurityHeaders, applySecurityHeaders } from './headers';
export type { SecurityHeadersConfig } from './headers';

export {
  withRateLimit,
  createRateLimiter,
  authRateLimiter,
  apiRateLimiter,
} from './rateLimit';
export type { RateLimitConfig, RateLimitEntry } from './rateLimit';

export { withCors, applyCorsHeaders, strictCors, openCors } from './cors';
export type { CorsConfig } from './cors';

/**
 * Compose multiple security middlewares
 */
import type { NextApiHandler } from 'next';
import { withSecurityHeaders } from './headers';
import { withRateLimit } from './rateLimit';
import { withCors } from './cors';
import { withLogging } from '../logging';

/**
 * Apply all security middlewares to an API handler
 * Order: CORS -> Security Headers -> Rate Limit -> Logging -> Handler
 */
export function withSecurity(handler: NextApiHandler): NextApiHandler {
  return withCors(
    withSecurityHeaders(
      withRateLimit(
        withLogging(handler)
      )
    )
  );
}

/**
 * Apply security middlewares for public APIs
 * Less restrictive for external access
 */
export function withPublicSecurity(handler: NextApiHandler): NextApiHandler {
  return withCors(
    withSecurityHeaders(
      withLogging(handler)
    ),
    { origins: ['*'], credentials: false }
  );
}

/**
 * Apply security middlewares for authenticated APIs
 * Stricter rate limiting
 */
export function withAuthSecurity(handler: NextApiHandler): NextApiHandler {
  return withCors(
    withSecurityHeaders(
      withRateLimit(
        withLogging(handler),
        { maxRequests: 30, windowMs: 60000 }
      )
    )
  );
}
