"use server";

import { AuthError } from "next-auth";
import { z } from "zod";
import { signIn } from "@/auth";
import { t } from "@/lib/i18n/de";

const loginSchema = z.object({
  email: z.string().email(),
  password: z.string().min(1),
});

export type LoginState = { error: string } | null;

/**
 * Server Action für den Authentik-OIDC-Login. Leitet zum Provider weiter; das
 * `signIn`-Gate in `auth.ts` lässt nur vorgemerkte, aktive authentik-Konten zu.
 */
export async function authentikLoginAction(): Promise<void> {
  await signIn("authentik", { redirectTo: "/" });
}

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: t("auth.fehlgeschlagen") };
  }

  try {
    await signIn("credentials", {
      email: parsed.data.email,
      password: parsed.data.password,
      redirectTo: "/",
    });
    return null;
  } catch (error) {
    if (error instanceof AuthError) {
      return { error: t("auth.fehlgeschlagen") };
    }
    // NEXT_REDIRECT u. ä. müssen weitergereicht werden.
    throw error;
  }
}
