import { Hono } from 'hono';
import type { PrekeyStore } from './store.js';

/**
 * Health check endpoint for production deployments.
 *
 * GET /health  → 200 if storage backend reachable, 503 otherwise
 */
export function createHealthRoutes(store: PrekeyStore, version: string): Hono {
  const startTime = Date.now();

  const app = new Hono();

  app.get('/health', async (c) => {
    try {
      // Probe the store with a no-op operation
      await store.getOneTimePreKeyCount('__health__');
      return c.json({
        status: 'ok',
        version,
        uptimeSeconds: Math.floor((Date.now() - startTime) / 1000),
      });
    } catch (err) {
      return c.json(
        {
          status: 'error',
          version,
          error: err instanceof Error ? err.message : String(err),
        },
        503,
      );
    }
  });

  // Kubernetes-style probes
  app.get('/healthz', async (c) => {
    try {
      await store.getOneTimePreKeyCount('__health__');
      return c.text('ok');
    } catch {
      return c.text('error', 503);
    }
  });

  app.get('/ready', async (c) => {
    try {
      await store.getOneTimePreKeyCount('__health__');
      return c.text('ready');
    } catch {
      return c.text('not ready', 503);
    }
  });

  return app;
}
