import { NextResponse } from "next/server";

import { requireAuth } from "@/lib/requireAuth";
import {
  ALERT_MAIL_GROUPS,
  getAlertMailPreview,
  isAlertMailGroup,
  parseAlertMailReferenceDate,
} from "@/services/alertes-mail.service";

export const dynamic = "force-dynamic";

export async function GET(request: Request) {
  const authError = requireAuth(request);

  if (authError) {
    return authError;
  }

  const { searchParams } = new URL(request.url);
  const requestedGroup = (searchParams.get("groupe") ?? "cisp")
    .trim()
    .toLocaleLowerCase("fr");

  if (!isAlertMailGroup(requestedGroup)) {
    return NextResponse.json(
      {
        message: "Groupe destinataire invalide",
        allowedGroups: ALERT_MAIL_GROUPS,
      },
      {
        status: 400,
        headers: {
          "Cache-Control": "no-store",
        },
      },
    );
  }

  const requestedDate = searchParams.get("date");
  const referenceDate = parseAlertMailReferenceDate(requestedDate);

  if (requestedDate && !referenceDate) {
    return NextResponse.json(
      {
        message: "Date de simulation invalide. Format attendu : AAAA-MM-JJ",
      },
      {
        status: 400,
        headers: {
          "Cache-Control": "no-store",
        },
      },
    );
  }

  try {
    const preview = await getAlertMailPreview(
      requestedGroup,
      referenceDate ?? undefined,
    );

    return NextResponse.json(
      {
        item: preview,
      },
      {
        headers: {
          "Cache-Control": "no-store",
        },
      },
    );
  } catch (error) {
    console.error(
      "Erreur lors de la génération de la prévisualisation du mail d'alertes :",
      error,
    );

    return NextResponse.json(
      {
        message:
          "Erreur lors de la génération de la prévisualisation du mail d'alertes",
      },
      {
        status: 500,
        headers: {
          "Cache-Control": "no-store",
        },
      },
    );
  }
}