const slugifyLib = require("slugify");

/** Équivalent de django.utils.text.slugify utilisé dans les modèles (save()). */
function makeSlug(text) {
  return slugifyLib(text, { lower: true, strict: true, locale: "fr" });
}

/** Garantit l'unicité du slug (ajoute -2, -3... si besoin), comme le ferait
 *  une contrainte unique= gérée manuellement côté Django. */
async function uniqueSlug(model, baseText, excludeId = null) {
  const base = makeSlug(baseText);
  let candidate = base;
  let i = 2;
  // eslint-disable-next-line no-constant-condition
  while (true) {
    const where = { slug: candidate };
    const existing = await model.findOne({ where });
    if (!existing || (excludeId && existing.id === excludeId)) return candidate;
    candidate = `${base}-${i}`;
    i += 1;
  }
}

module.exports = { makeSlug, uniqueSlug };
