import fp from 'fastify-plugin';
import type { FastifyInstance } from 'fastify';

declare module 'fastify' {
  interface FastifyInstance {
    config: {
      DATABASE_URL: string;
      REDIS_URL: string;
      JWT_SECRET: string;
      JWT_REFRESH_SECRET: string;
      HOST: string;
      PORT: number;
      LATE_THRESHOLD_MINUTES: number;
      NODE_ENV: string;
    };
  }
}

export default fp(async function envPlugin(fastify: FastifyInstance) {
  const config = {
    DATABASE_URL: process.env['DATABASE_URL'] ?? '',
    REDIS_URL: process.env['REDIS_URL'] ?? 'redis://localhost:6379',
    JWT_SECRET: process.env['JWT_SECRET'] ?? 'dev_secret_change_in_production_32c',
    JWT_REFRESH_SECRET: process.env['JWT_REFRESH_SECRET'] ?? 'dev_refresh_secret_change_32chars',
    HOST: process.env['HOST'] ?? 'localhost',
    PORT: parseInt(process.env['PORT'] ?? '3333', 10),
    LATE_THRESHOLD_MINUTES: parseInt(process.env['LATE_THRESHOLD_MINUTES'] ?? '15', 10),
    NODE_ENV: process.env['NODE_ENV'] ?? 'development',
  };

  if (!config.DATABASE_URL) throw new Error('DATABASE_URL env var is required');

  fastify.decorate('config', config);
});
