import { NextResponse } from "next/server";

import { listMotifsM, createMotifsM } from "@/services/reference-lookups.service";
import { paginationQuerySchema } from "@/validators/pagination";
import { requireAuth } from "@/lib/requireAuth";
import { motifsMCreateSchema } from "@/validators/reference-lookups";

export async function GET(request: Request) {
    const url = new URL(request.url);
    const parsed = paginationQuerySchema.safeParse({
        limit: url.searchParams.get("limit") ?? undefined,
        offset: url.searchParams.get("offset") ?? undefined,
    });

    if (!parsed.success) {
        return NextResponse.json(
            { message: "Invalid query parameters", issues: parsed.error.flatten() },
            { status: 400 },
        );
    }

    const items = await listMotifsM(parsed.data.limit, parsed.data.offset);
    
      return NextResponse.json({
        message: "Motifs dérogation mutuelle retrieved successfully",
        items,
        count: items.length,
      });
}

export async function POST(request: Request){
  const authError = requireAuth(request);
  if (authError) {
    return authError;
  }

  let body: unknown;

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

  const parsed = motifsMCreateSchema.safeParse(body);

  if (!parsed.success) {
    return NextResponse.json(
      { message: "Invalid body parameters", issues: parsed.error.issues },
      { status: 400 },
    );
  }

  const data = await  createMotifsM(parsed.data);

  return NextResponse.json(
    {
      message: "Motif dérogation mutuelle created successfully",
      poste: data,
    },
    { status: 201 },
  );
}
