import { useSyncExternalStore } from "react";
import { mockServices } from "@/lib/mock/services";
import type { Service } from "@/lib/mock/types";

let services: Service[] = [...mockServices];
const listeners = new Set<() => void>();
const emit = () => listeners.forEach((l) => l());

export const servicesStore = {
  getAll(): Service[] {
    return services;
  },
  add(s: Service) {
    services = [s, ...services];
    emit();
  },
  update(id: string, patch: Partial<Service>) {
    services = services.map((s) => (s.id === id ? { ...s, ...patch } : s));
    emit();
  },
  subscribe(cb: () => void) {
    listeners.add(cb);
    return () => listeners.delete(cb);
  },
};

export function useServices(): Service[] {
  return useSyncExternalStore(
    servicesStore.subscribe,
    servicesStore.getAll,
    servicesStore.getAll,
  );
}
