import type { FastifyInstance } from 'fastify';
import fp from 'fastify-plugin';
import { logger } from '../utils/logger.js';

async function requestLoggerPlugin(fastify: FastifyInstance) {
  fastify.addHook('onRequest', async (request) => {
    request.requestStartedAt = Date.now();
  });

  fastify.addHook('onResponse', async (request, reply) => {
    const duration = Date.now() - (request.requestStartedAt ?? Date.now());
    const userId = request.user?.id ?? 'anonymous';
    logger.info({
      method: request.method,
      url: request.url,
      statusCode: reply.statusCode,
      duration: `${duration}ms`,
      userId,
    });
  });
}

declare module 'fastify' {
  interface FastifyRequest {
    requestStartedAt: number;
  }
}

export default fp(requestLoggerPlugin, { name: 'requestLogger' });
