const fastify = require('fastify')({ logger: true });
const { PrismaClient } = require('@prisma/client');
require('dotenv').config();

// Création de l'instance Prisma
const prisma = new PrismaClient();

// Plugins
fastify.register(require('@fastify/cors'), {
  origin: true, // Autoriser toutes les origines en développement
  // Ou spécifier correctement les origines autorisées :
  // origin: ['http://localhost:5173', 'http://127.0.0.1:5173'],
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization'],
  credentials: true
});

fastify.register(require('./plugins/auth'));
fastify.register(require('./plugins/stripe'));
fastify.register(require('./plugins/ai'));

// Routes
fastify.register(require('./routes/auth'), { prefix: '/auth' });
fastify.register(require('./routes/recipes'), { prefix: '/recipes' });

// Hook pour fermer la connexion Prisma à l'arrêt du serveur
fastify.addHook('onClose', async (instance, done) => {
  await prisma.$disconnect();
  done();
});

// Décoration pour rendre prisma disponible dans les routes
fastify.decorate('prisma', prisma);

// Démarrage du serveur
const start = async () => {
  try {
    await fastify.listen({ port: process.env.PORT || 3000, host: '0.0.0.0' });
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};

start();