import { NextResponse } from "next/server";
import {
  DEMO_ACCESS_COOKIE,
  getDemoAccessCookieOptions,
  getDemoAccessCookieValue,
  getSafeRedirectPath,
  passwordMatchesDemoAccess,
} from "@/lib/demo-auth";
import { DemoAccessRequestSchema } from "@/lib/schemas";

export const runtime = "nodejs";

export async function POST(request: Request) {
  try {
    const payload = DemoAccessRequestSchema.parse(await request.json());

    if (!passwordMatchesDemoAccess(payload.password)) {
      return NextResponse.json(
        { error: "Mot de passe invalide." },
        { status: 403 },
      );
    }

    const response = NextResponse.json({
      ok: true,
      nextPath: getSafeRedirectPath(payload.next),
    });

    response.cookies.set(
      DEMO_ACCESS_COOKIE,
      getDemoAccessCookieValue(),
      getDemoAccessCookieOptions(),
    );

    return response;
  } catch (error) {
    const message =
      error instanceof Error
        ? error.message
        : "Impossible d'ouvrir l'acces demo.";

    return NextResponse.json({ error: message }, { status: 400 });
  }
}

export async function DELETE() {
  const response = NextResponse.json({ ok: true });

  response.cookies.set(DEMO_ACCESS_COOKIE, "", {
    ...getDemoAccessCookieOptions(),
    maxAge: 0,
  });

  return response;
}
