"use server";

import { AuthError } from "next-auth";
import { signIn } from "@/auth";
import { loginSchema } from "@/lib/validation/auth";

export type LoginState = { error?: string };

/** Verhindert Open-Redirects: nur app-interne, relative Pfade zulassen. */
function safeRedirect(target: FormDataEntryValue | null): string {
  const t = typeof target === "string" ? target : "";
  if (t.startsWith("/") && !t.startsWith("//")) return t;
  return "/dashboard";
}

export async function loginAction(
  _prev: LoginState,
  formData: FormData,
): Promise<LoginState> {
  const parsed = loginSchema.safeParse({
    email: formData.get("email"),
    password: formData.get("password"),
  });

  if (!parsed.success) {
    return { error: "Bitte gültige Zugangsdaten eingeben." };
  }

  const redirectTo = safeRedirect(formData.get("callbackUrl"));

  try {
    await signIn("credentials", {
      email: parsed.data.email,
      password: parsed.data.password,
      redirectTo,
    });
  } catch (error) {
    // AuthError = ungültige Anmeldedaten. Bewusst generische Meldung.
    if (error instanceof AuthError) {
      return { error: "E-Mail oder Passwort ist ungültig." };
    }
    // Erfolgs-Redirect (NEXT_REDIRECT) und andere Fehler weiterreichen.
    throw error;
  }

  return {};
}
