type Listener = (count: number) => void;

let count = 1284;
const listeners = new Set<Listener>();
let timer: ReturnType<typeof setInterval> | null = null;

function ensureTicker() {
  if (timer) return;
  timer = setInterval(() => {
    const delta = Math.floor(Math.random() * 11) - 5;
    count = Math.max(400, count + delta);
    listeners.forEach((l) => l(count));
  }, 3500);
}

export const presenceService = {
  current() { return count; },
  subscribe(cb: Listener) {
    listeners.add(cb);
    ensureTicker();
    cb(count);
    return () => {
      listeners.delete(cb);
      if (listeners.size === 0 && timer) { clearInterval(timer); timer = null; }
    };
  },
};