import { prisma } from "@pmap/database";

const defaultPasswordSettingKey = "paid_comped_participant_default_password";
const fallbackDefaultPassword = "Participant!2026";

type DefaultPasswordSettingValue = {
  password?: unknown;
};

function normalizePassword(value: unknown) {
  const password = typeof value === "string" ? value.trim() : "";
  return password.length >= 8 ? password : fallbackDefaultPassword;
}

export function fallbackParticipantDefaultPassword() {
  return fallbackDefaultPassword;
}

export async function getPaidCompedParticipantDefaultPassword() {
  const setting = await prisma.systemSetting.findFirst({
    where: { conferenceId: null, key: defaultPasswordSettingKey }
  });
  if (setting?.value && typeof setting.value === "object" && "password" in setting.value) {
    return normalizePassword((setting.value as DefaultPasswordSettingValue).password);
  }
  return fallbackDefaultPassword;
}

export async function savePaidCompedParticipantDefaultPassword(password: string) {
  const normalizedPassword = normalizePassword(password);
  const existing = await prisma.systemSetting.findFirst({
    where: { conferenceId: null, key: defaultPasswordSettingKey }
  });

  if (existing) {
    await prisma.systemSetting.update({
      where: { id: existing.id },
      data: { value: { password: normalizedPassword } }
    });
  } else {
    await prisma.systemSetting.create({
      data: { key: defaultPasswordSettingKey, value: { password: normalizedPassword } }
    });
  }

  return normalizedPassword;
}

export function shouldUsePaidCompedDefaultPassword(paymentStatus: string | undefined) {
  const normalizedStatus = (paymentStatus ?? "").trim().toUpperCase();
  return normalizedStatus === "PAID" || normalizedStatus === "COMPED";
}
