import { useSyncExternalStore } from "react";
import { mockClients } from "@/lib/mock/clients";
import type { Client } from "@/lib/mock/types";

export type ClientExtra = {
  contactName?: string;
  website?: string;
  notes?: string;
};

export type ClientRecord = Client & ClientExtra;

let clients: ClientRecord[] = [...mockClients];
const listeners = new Set<() => void>();
const emit = () => listeners.forEach((l) => l());

export const clientsStore = {
  getAll(): ClientRecord[] {
    return clients;
  },
  add(c: ClientRecord) {
    clients = [c, ...clients];
    emit();
  },
  update(id: string, patch: Partial<ClientRecord>) {
    clients = clients.map((c) => (c.id === id ? { ...c, ...patch } : c));
    emit();
  },
  subscribe(cb: () => void) {
    listeners.add(cb);
    return () => listeners.delete(cb);
  },
};

export function useClients(): ClientRecord[] {
  return useSyncExternalStore(
    clientsStore.subscribe,
    clientsStore.getAll,
    clientsStore.getAll,
  );
}
