export function esc(s) {
  return String(s ?? '')
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;');
}

/** Rufnummer für href="tel:…" (Ziffern, höchstens ein führendes +). */
export function telHref(raw) {
  const t = String(raw ?? '').trim();
  if (!t) return '';
  const digitsPlus = t.replace(/[^\d+]/g, '');
  if (!digitsPlus) return '';
  const normalized = digitsPlus.startsWith('+')
    ? '+' + digitsPlus.slice(1).replace(/\+/g, '')
    : digitsPlus.replace(/\+/g, '');
  return `tel:${normalized}`;
}

export function formatDateTime(iso) {
  try {
    return new Date(iso).toLocaleString('de-DE');
  } catch {
    return '—';
  }
}

export function formatDeSyncDateTime(iso) {
  if (!iso) return '—';
  try {
    return new Date(iso).toLocaleString('de-DE', {
      day: 'numeric',
      month: 'numeric',
      year: 'numeric',
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit',
    });
  } catch {
    return '—';
  }
}

export function extrasName(m) {
  const x = m?.extras;
  if (!x || typeof x !== 'object') return '';
  return String(x.Name || '').trim();
}

/** Anzeige Dauer aus gespeicherten Sekunden (TeamViewer start/end). */
export function formatRemoteDurationDe(totalSec) {
  if (totalSec == null || totalSec < 0) return '';
  const n = Math.floor(Number(totalSec));
  const m = Math.floor(n / 60);
  const s = n % 60;
  if (m === 0) return `${s} Sek.`;
  if (s === 0) return `${m} Min.`;
  return `${m} Min. ${s} Sek.`;
}
