// Utility functions for Naffco dashboard

const NAFFCO_API = window.location.origin;

// ── Auth token ──────────────────────────────────────────────────────────────
function getAuthToken() { return localStorage.getItem("naffco_token"); }
function setAuthToken(t) { localStorage.setItem("naffco_token", t); }
function clearAuthToken() { localStorage.removeItem("naffco_token"); }

function authFetch(url, opts = {}) {
  const token = getAuthToken();
  return fetch(url, {
    ...opts,
    headers: { ...opts.headers, ...(token ? { Authorization: `Bearer ${token}` } : {}) },
  });
}

// ── Formatting ──────────────────────────────────────────────────────────────

function fmtDate(d) {
  if (!d) return "—";
  const dt = new Date(d);
  return dt.toLocaleDateString("en-GB", { day: "numeric", month: "short" });
}

function fmtDateTime(d) {
  if (!d) return "—";
  const dt = new Date(d);
  return `${fmtDate(d)} ${fmtClock(dt)}`;
}

function fmtClock(d) {
  return `${String(d.getHours()).padStart(2, "0")}:${String(d.getMinutes()).padStart(2, "0")}`;
}

function timeAgo(d) {
  if (!d) return "—";
  const s = Math.floor((Date.now() - new Date(d).getTime()) / 1000);
  if (s < 60) return "just now";
  if (s < 3600) return `${Math.floor(s / 60)}m ago`;
  if (s < 86400) return `${Math.floor(s / 3600)}h ago`;
  return `${Math.floor(s / 86400)}d ago`;
}

// ── Alarm helpers ───────────────────────────────────────────────────────────

function alarmTypeMeta(type) {
  const t = (type || "").toLowerCase();
  if (t.includes("fire")) return { label: "Fire Alarm", color: "text-rose-300", bg: "bg-rose-500/10", ring: "ring-rose-500/30", icon: "Flame" };
  if (t.includes("fault")) return { label: "Fault Alarm", color: "text-amber-300", bg: "bg-amber-500/10", ring: "ring-amber-500/30", icon: "AlertTriangle" };
  if (t.includes("pump")) return { label: "Pump Running", color: "text-sky-300", bg: "bg-sky-500/10", ring: "ring-sky-500/30", icon: "Activity" };
  if (t.includes("supervisory")) return { label: "Supervisory", color: "text-violet-300", bg: "bg-violet-500/10", ring: "ring-violet-500/30", icon: "Shield" };
  return { label: type || "Unknown", color: "text-ink-300", bg: "bg-white/5", ring: "ring-white/10", icon: "AlertTriangle" };
}

function crmssStatusMeta(status) {
  const s = (status || "").toUpperCase();
  if (s === "FIRE") return { label: "🔥 FIRE", color: "text-rose-300", bg: "bg-rose-500/10", ring: "ring-rose-500/30" };
  if (s === "FAULT") return { label: "⚠️ False Alarm", color: "text-amber-300", bg: "bg-amber-500/10", ring: "ring-amber-500/30" };
  if (s === "ANSWERED") return { label: "📞 Answered", color: "text-emerald-300", bg: "bg-emerald-500/10", ring: "ring-emerald-500/30" };
  if (s === "NO RESPONSE") return { label: "⏰ No Response", color: "text-orange-300", bg: "bg-orange-500/10", ring: "ring-orange-500/30" };
  if (s === "NO AVAILABLE") return { label: "📵 Not Available", color: "text-red-300", bg: "bg-red-500/10", ring: "ring-red-500/30" };
  return { label: status || "—", color: "text-ink-400", bg: "bg-white/5", ring: "ring-white/10" };
}

function alarmStatusMeta(status) {
  if (status === "active") return { label: "Active", color: "text-amber-300", bg: "bg-amber-500/10" };
  if (status === "dispatching") return { label: "Dispatching", color: "text-sky-300", bg: "bg-sky-500/10" };
  if (status === "in_progress") return { label: "In Progress", color: "text-emerald-300", bg: "bg-emerald-500/10" };
  if (status === "completed") return { label: "Completed", color: "text-emerald-300", bg: "bg-emerald-500/10" };
  if (status === "failed") return { label: "Failed", color: "text-rose-300", bg: "bg-rose-500/10" };
  return { label: status || "—", color: "text-ink-400", bg: "bg-white/5" };
}

function langLabel(lang) {
  if (!lang) return "EN";
  if (lang.startsWith("ar")) return "AR";
  if (lang === "en-in") return "EN-IN";
  return "EN";
}

// ── Transcript parsing ──────────────────────────────────────────────────────

function parseTranscript(entries) {
  if (!entries || !Array.isArray(entries)) return { turns: [], header: "" };
  const turns = entries.map(e => ({
    speaker: e.role === "user" ? "user" : e.role === "assistant" ? "bot" : e.role,
    text: e.content || "",
  }));
  return { turns, header: "" };
}
