import { NextResponse } from "next/server";

import { requirePermission } from "@/lib/authorization";
import {
  getSectorEmailsSettings,
  updateSectorEmails,
} from "@/services/sector-emails.service";
import { sectorEmailsUpdateSchema } from "@/validators/sector-emails";

export const dynamic = "force-dynamic";

export async function GET(request: Request) {
  const auth = await requirePermission(request, "parametres", "read");

  if (!auth.ok) {
    return auth.response;
  }

  const settings = await getSectorEmailsSettings();

  return NextResponse.json({
    message: "Sector email settings retrieved successfully",
    ...settings,
  });
}

export async function PATCH(request: Request) {
  const auth = await requirePermission(request, "parametres", "write");

  if (!auth.ok) {
    return auth.response;
  }

  let body: unknown;

  try {
    body = await request.json();
  } catch {
    return NextResponse.json(
      { message: "Corps JSON invalide" },
      { status: 400 },
    );
  }

  const parsed = sectorEmailsUpdateSchema.safeParse(body);

  if (!parsed.success) {
    return NextResponse.json(
      {
        message: "Validation échouée",
        errors: parsed.error.flatten(),
      },
      { status: 400 },
    );
  }

  const sector = await updateSectorEmails(parsed.data);

  if (!sector) {
    return NextResponse.json(
      { message: "Secteur introuvable" },
      { status: 404 },
    );
  }

  return NextResponse.json({
    message: `Les destinataires de ${sector.name} ont été enregistrés.`,
    item: sector,
  });
}
