/* @vitest-environment node */

import { describe, it, expect } from "vitest";
import { ApiClientError } from "@/lib/frontend/apiClient";
import { LOGIN_REASONS } from "@/lib/frontend/authRedirect";
import { getLoginReasonAlert, getLoginErrorMessage } from "./authMessages.js";

describe("lib/frontend/authMessages", () => {
	describe("getLoginReasonAlert", () => {
		it("returns alert copy for reason=expired", () => {
			expect(getLoginReasonAlert(LOGIN_REASONS.EXPIRED)).toEqual({
				title: "Sitzung abgelaufen",
				description:
					"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.",
			});
		});

		it("returns alert copy for reason=logged-out", () => {
			expect(getLoginReasonAlert(LOGIN_REASONS.LOGGED_OUT)).toEqual({
				title: "Abgemeldet",
				description: "Sie wurden erfolgreich abgemeldet.",
			});
		});

		it("returns null for unknown or missing reason", () => {
			expect(getLoginReasonAlert(null)).toBe(null);
			expect(getLoginReasonAlert("unknown")).toBe(null);
		});
	});

	describe("getLoginErrorMessage", () => {
		it("maps AUTH_INVALID_CREDENTIALS to a friendly message", () => {
			const err = new ApiClientError({
				status: 401,
				code: "AUTH_INVALID_CREDENTIALS",
				message: "Invalid credentials",
			});

			expect(getLoginErrorMessage(err)).toBe(
				"Benutzername oder Passwort ist falsch."
			);
		});

		it("maps CLIENT_NETWORK_ERROR to a friendly message", () => {
			const err = new ApiClientError({
				status: 0,
				code: "CLIENT_NETWORK_ERROR",
				message: "Network error",
			});

			expect(getLoginErrorMessage(err)).toBe(
				"Netzwerkfehler. Bitte prüfen Sie Ihre Verbindung und versuchen Sie es erneut."
			);
		});

		it("uses a generic message for other errors", () => {
			expect(getLoginErrorMessage(new Error("boom"))).toBe(
				"Anmeldung fehlgeschlagen. Bitte erneut versuchen."
			);
		});
	});
});
