/**
 * REFS: API-Client für getippte Kurz-Verweise (Shortlinks, git-Stil) in Freitexten.
 *
 * Tokens im Text: `tier:<code>`, `kontakt:<code>`, `wurf:<code>`, `gehege:<code>` —
 * `<code>` ist ein GUID-Präfix (mind. 6 Hex) oder die volle GUID. Das Backend löst
 * sie zu { id, name } auf (mehrdeutig/unbekannt => id=null); das Frontend rendert
 * daraus Name + internen Link zur jeweiligen Detailseite.
 */
import { api } from './client'

/** Die vier auflösbaren Entitätstypen (Token-Präfix vor dem ":"). */
export type RefType = 'tier' | 'kontakt' | 'wurf' | 'gehege'

export interface RefRequest {
  type: RefType
  code: string
}

export interface RefResolution {
  type: string
  code: string
  /** Volle GUID oder null (unbekannt ODER mehrdeutig — nicht geraten). */
  id: string | null
  name: string | null
}

/** Routen-Präfix je Typ für den internen Link (siehe App.tsx). */
export const REF_ROUTE: Record<RefType, string> = {
  tier: '/rennmaeuse',
  kontakt: '/kontakte',
  wurf: '/wuerfe',
  gehege: '/gehege',
}
// Hinweis: Frontend-Routen weichen vom Token-Namen ab (wurf→/wuerfe), daher die Map.

/** Token-Regex: `tier|kontakt|wurf|gehege` ":" gefolgt von >=6 Hex (oder voller GUID mit "-"). */
export const REF_TOKEN_RE = /\b(tier|kontakt|wurf|gehege):([0-9a-fA-F]{6,}(?:-[0-9a-fA-F-]+)?)/g

/** Erste 8 Hex-Stellen (erster GUID-Block) als Kurz-ID — wie eine kurze Git-Commit-ID. */
export function shortCode(id: string): string {
  return id.replace(/-/g, '').slice(0, 8)
}

/** Vollständiges Token für die Zwischenablage, z. B. "tier:3c5b747b". */
export function shortToken(type: RefType, id: string): string {
  return `${type}:${shortCode(id)}`
}

export function resolveRefs(refs: RefRequest[]): Promise<RefResolution[]> {
  return api.post<RefResolution[]>('/refs/resolve', { refs })
}
