/* =====================================================================
 * Règles de mot de passe (vérifiées aussi par le serveur).
 * ===================================================================== */

const PASSWORD_MIN_LENGTH = 10;

/** Identifiant de connexion proposé : partie locale de l'email, sinon prenom.nom. */
function defaultIdentifiant(user, list = []) {
  const base =
    (user.email ? user.email.split('@')[0] : `${user.prenom || ''}.${user.nom || ''}`)
      .toLowerCase()
      .normalize('NFD')
      .replace(/[\u0300-\u036f]/g, '')
      .replace(/[^a-z0-9.]+/g, '.')
      .replace(/^\.+|\.+$/g, '') || 'utilisateur';
  let id = base;
  for (let n = 2; list.some((u) => u.id !== user.id && (u.identifiant || '').toLowerCase() === id); n += 1) id = `${base}${n}`;
  return id;
}

function passwordError(password, confirm) {
  if (!password || password.length < PASSWORD_MIN_LENGTH) return `Au moins ${PASSWORD_MIN_LENGTH} caractères.`;
  if (confirm !== undefined && password !== confirm) return 'Les deux mots de passe ne correspondent pas.';
  return null;
}

const GENERATED_ALPHABET = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789';

/** Mot de passe aléatoire lisible (4 groupes de 4 caractères). */
function generatePassword() {
  const bytes = new Uint32Array(16);
  crypto.getRandomValues(bytes);
  const chars = [...bytes].map((n) => GENERATED_ALPHABET[n % GENERATED_ALPHABET.length]);
  return [0, 4, 8, 12].map((i) => chars.slice(i, i + 4).join('')).join('-');
}
