import express from "express";
import helmet from "helmet";
import cors from "cors";
import cookieParser from "cookie-parser";
import { env } from "./config/env";
import { authRouter } from "./modules/auth/auth.routes";
import { usersRouter } from "./modules/users/users.routes";
import { googleRouter } from "./modules/google/google.routes";
import { configRouter } from "./modules/config/config.routes";
import { calendarRouter } from "./modules/calendar/calendar.routes";
import { mailRouter } from "./modules/mail/mail.routes";
import { driveRouter } from "./modules/drive/drive.routes";
import { trackingRouter } from "./modules/tracking/tracking.routes";
import { whatsappRouter } from "./modules/whatsapp/whatsapp.routes";
import { auditRouter } from "./modules/audit/audit.routes";

const app = express();

// Derrière le reverse proxy Apache : req.ip reflète l'IP réelle du client (X-Forwarded-For).
app.set("trust proxy", true);

app.use(helmet());
app.use(cors({ origin: env.corsOrigin, credentials: true }));
app.use(express.json({ limit: "5mb" }));
app.use(cookieParser());

// Santé — utilisé pour vérifier que le backend répond derrière Apache (/backend/health)
app.get("/health", (_req, res) => {
  res.json({ ok: true, service: "leperelion-backend", time: new Date().toISOString() });
});

// --- Modules ---
app.use("/auth", authRouter);
app.use("/users", usersRouter);
app.use("/google", googleRouter);
app.use("/config", configRouter);
app.use("/calendar", calendarRouter);
app.use("/mail", mailRouter);
app.use("/drive", driveRouter);
app.use("/track", trackingRouter);
app.use("/whatsapp", whatsappRouter);
app.use("/audit", auditRouter);

// 404
app.use((_req, res) => {
  res.status(404).json({ error: "Not found" });
});

// Gestionnaire d'erreurs
app.use(
  (err: unknown, _req: express.Request, res: express.Response, _next: express.NextFunction) => {
    console.error(err);
    res.status(500).json({ error: "Internal server error" });
  }
);

app.listen(env.port, () => {
  console.log(`leperelion-backend en écoute sur http://localhost:${env.port}`);
});
