/* ============================================================
   Shared helpers: number formatting + icon set
   Exposes window.fmt, window.Icon
   ============================================================ */

const gbp = (n, dp = 0) =>
  "£" + (isFinite(n) ? n : 0).toLocaleString("en-GB", { minimumFractionDigits: dp, maximumFractionDigits: dp });
const gbp2 = (n) => gbp(n, 2);
// pennies only when the figure isn't a whole pound — respects precise user input
const gbpAuto = (n) => (Number.isInteger(n) ? gbp(n, 0) : gbp(n, 2));
const pct = (n, dp = 1) => (isFinite(n) ? n : 0).toFixed(dp) + "%";
const num = (n) => (isFinite(n) ? n : 0).toLocaleString("en-GB");
const months = (m) => `${m} mo`;

window.fmt = { gbp, gbp2, gbpAuto, pct, num, months };

/* ---- Icons (stroke, currentColor, 24 viewbox) ---- */
const P = (d) => ({ d });
const ICONS = {
  pcp: "M3 13h18M5 13V7a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v6M5 13v4a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2M15 19a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2v-4",
  equity: "M3 3v18h18M7 14l3-3 3 3 5-6",
  settle: "M12 2v20M5 7l7-4 7 4M5 7v8l7 4 7-4V7",
  balloon: "M12 3a6 6 0 0 1 6 6c0 4-6 9-6 9s-6-5-6-9a6 6 0 0 1 6-6zM12 18v3",
  owner: "M3 21h18M5 21V8l7-5 7 5v13M9 21v-6h6v6",
  compare: "M9 3v18M3 7h6M3 12h6M15 3v18m6-13h-6m6 5h-6",
  dealer: "M4 4h16v4H4zM6 8v12h12V8M9 12h6",
  download: "M12 3v12m0 0l-4-4m4 4l4-4M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",
  share: "M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8M16 6l-4-4-4 4M12 2v14",
  info: "M12 16v-5m0-3h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0z",
  warn: "M12 9v4m0 4h.01M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z",
  sun: "M12 3v2m0 14v2M5.6 5.6l1.4 1.4m10 10 1.4 1.4M3 12h2m14 0h2M5.6 18.4l1.4-1.4m10-10 1.4-1.4M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8z",
  moon: "M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z",
  desktop: "M3 4h18v12H3zM8 20h8m-4-4v4",
  mobile: "M7 2h10a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zM11 18h2",
  check: "M20 6 9 17l-5-5",
  arrow: "M5 12h14m-6-6 6 6-6 6",
  bolt: "M13 2 3 14h7l-1 8 10-12h-7l1-8z",
  fuel: "M3 22V4a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v18M3 10h10M16 8l3 3v7a2 2 0 0 0 2-2V9l-4-4",
  spark: "M12 2v4m0 12v4M2 12h4m12 0h4M5 5l2.5 2.5M16.5 16.5 19 19M19 5l-2.5 2.5M7.5 16.5 5 19",
  clock: "M12 7v5l3 2M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0z",
  scale: "M12 3v18M7 21h10M5 7l7-2 7 2M5 7l-2 6a3 3 0 0 0 6 0L5 7zm14 0-2 6a3 3 0 0 0 6 0l-2-6",
};

function Icon({ name, className, style }) {
  const d = ICONS[name];
  if (!d) return null;
  return (
    <svg className={className} style={style} viewBox="0 0 24 24" fill="none"
      stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
      {d.split("M").filter(Boolean).map((seg, idx) => <path key={idx} d={"M" + seg} />)}
    </svg>
  );
}
window.Icon = Icon;
