/**
 * Point d'entrée du process. Toute la logique vit dans app.js pour rester
 * testable ; ce fichier ne fait qu'ouvrir la connexion DB et écouter.
 */
import pg from "pg";
import { buildServer } from "./app.js";

const { Pool } = pg;

const PORT = Number(process.env.PORT || 3000);
const DATABASE_URL = process.env.DATABASE_URL;

const pool = DATABASE_URL
  ? new Pool({ connectionString: DATABASE_URL, statement_timeout: 60000 })
  : null;

const fastify = await buildServer({ pool, logger: true });

// `listen()` renvoie une promesse : sans catch, un port déjà pris produisait un
// unhandled rejection et un process zombie au lieu d'un exit code non nul (que
// Docker/Coolify utilisent pour redémarrer le conteneur).
fastify.listen({ port: PORT, host: "0.0.0.0" }).catch((err) => {
  fastify.log.error(err, "[api] listen failed");
  process.exit(1);
});
