import { getAdminSessionFromRequest } from "../../../../../auth";
import { fail, ok } from "../../../_lib";
import { fallbackParticipantDefaultPassword, getPaidCompedParticipantDefaultPassword, savePaidCompedParticipantDefaultPassword } from "../_default-password";

export async function GET(request: Request) {
  try {
    if (!await getAdminSessionFromRequest(request)) return fail(request, "UNAUTHORIZED", "Admin login is required.", 401);
    const password = await getPaidCompedParticipantDefaultPassword();
    return ok(request, {
      password,
      fallback: fallbackParticipantDefaultPassword()
    });
  } catch (error) {
    return fail(request, "DEFAULT_PASSWORD_UNAVAILABLE", "Default password setting could not be loaded.", 500, error instanceof Error ? error.message : error);
  }
}

export async function PATCH(request: Request) {
  try {
    if (!await getAdminSessionFromRequest(request)) return fail(request, "UNAUTHORIZED", "Admin login is required.", 401);
    const payload = await request.json().catch(() => null) as { password?: unknown } | null;
    const password = typeof payload?.password === "string" ? payload.password : "";
    if (password.trim().length < 8) return fail(request, "PASSWORD_TOO_SHORT", "Default password must be at least 8 characters.", 422);
    return ok(request, {
      password: await savePaidCompedParticipantDefaultPassword(password),
      fallback: fallbackParticipantDefaultPassword()
    });
  } catch (error) {
    return fail(request, "DEFAULT_PASSWORD_UPDATE_FAILED", "Default password setting could not be saved.", 500, error instanceof Error ? error.message : error);
  }
}
