import { prisma } from "@/lib/prisma"
import { slugify } from "@/lib/slugify"

/**
 * Resolves a base slug from the article title to a unique value.
 * Tries `slug`, then `slug-1`, `slug-2`, … on conflicts.
 */
export async function resolveUniqueArticleSlug(baseTitle: string): Promise<string> {
  let slug = slugify(baseTitle)
  if (!slug) slug = "article"

  let n = 0
  for (;;) {
    const candidate = n === 0 ? slug : `${slug}-${n}`
    const existing = await prisma.article.findFirst({
      where: { slug: candidate },
      select: { id: true },
    })
    if (!existing) return candidate
    n += 1
  }
}

/** Unique slug from title when updating an article (ignores that article’s row). */
export async function resolveUniqueArticleSlugForUpdate(
  baseTitle: string,
  excludeArticleId: string
): Promise<string> {
  let slug = slugify(baseTitle)
  if (!slug) slug = "article"

  let n = 0
  for (;;) {
    const candidate = n === 0 ? slug : `${slug}-${n}`
    const existing = await prisma.article.findFirst({
      where: {
        slug: candidate,
        NOT: { id: excludeArticleId },
      },
      select: { id: true },
    })
    if (!existing) return candidate
    n += 1
  }
}
