// Encodage du chemin absolu d'un worktree pour le segment d'URL /workspace/:repoId/:wt.
// Source unique partagée par le front web ET l'extension VS Code (deep-link), pour éviter toute
// divergence d'encodage. base64url (sans +, /, =) donne un segment propre et réversible.

/** Encode un chemin absolu en base64url (sûr en segment d'URL). */
export function encodeWtKey(path: string): string {
  const b64 = btoa(unescape(encodeURIComponent(path)));
  return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

/**
 * Décode une clé de worktree vers son chemin absolu. Tolérant à deux formats historiques :
 * - base64url (front web, encodeWtKey) ;
 * - chemin percent-encodé (ancien deep-link VS Code via encodeURIComponent) : reconnaissable au
 *   caractère `%` que le base64url ne contient jamais.
 * Ne lève pas : renvoie la clé telle quelle en dernier recours.
 */
export function decodeWtKey(key: string): string {
  if (key.includes('%')) {
    try {
      return decodeURIComponent(key);
    } catch {
      return key;
    }
  }
  const b64 = key.replace(/-/g, '+').replace(/_/g, '/');
  const pad = b64.length % 4 === 0 ? '' : '='.repeat(4 - (b64.length % 4));
  try {
    return decodeURIComponent(escape(atob(b64 + pad)));
  } catch {
    return key;
  }
}
