import { IActor } from "@/types/actor";

function autoUpdateUsername(actor: IActor, newDisplayName: string | null): IActor {
  const oldUsername = convertToUsername(actor.name);

  if (actor.preferredUsername === oldUsername) {
    actor.preferredUsername = convertToUsername(newDisplayName);
  }

  return actor;
}

function convertToUsername(value: string | null): string {
  if (!value) return "";

  // https://stackoverflow.com/a/37511463
  return value
    .toLocaleLowerCase()
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "")
    .replace(/ /g, "_")
    .replace(/[^a-z0-9_]/g, "");
}

function validateUsername(actor: IActor): boolean {
  return actor.preferredUsername === convertToUsername(actor.preferredUsername);
}

export { autoUpdateUsername, convertToUsername, validateUsername };
