import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { getCurrentUserId, pb } from '@/services/pocketbase'; import type { AnalyseSecteurRecord } from '@/types/collections'; function escapeFilterValue(s: string): string { return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); } export function useAnalyseSecteurForVille(ville: string) { const uid = getCurrentUserId(); const key = ville.trim().toLowerCase(); return useQuery({ queryKey: ['analyse_secteur', uid, key], queryFn: async (): Promise => { if (!uid || !key) return null; const esc = escapeFilterValue(ville.trim()); const list = await pb.collection('analyses_secteur').getFullList({ filter: `user="${uid}" && ville="${esc}"`, sort: '-updated', }); return list[0] ?? null; }, enabled: Boolean(uid && key), }); } export function useSaveAnalyseSecteur() { const uid = getCurrentUserId(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (payload: { ville: string; notes: string }) => { if (!uid) throw new Error('Non connecté'); const ville = payload.ville.trim(); if (!ville) throw new Error('Ville requise'); const esc = escapeFilterValue(ville); const existing = await pb.collection('analyses_secteur').getFullList({ filter: `user="${uid}" && ville="${esc}"`, sort: '-updated', }); const row = existing[0]; if (row) { return pb.collection('analyses_secteur').update(row.id, { notes: payload.notes, }); } return pb.collection('analyses_secteur').create({ user: uid, ville, notes: payload.notes, }); }, onSuccess: (_, v) => { const key = v.ville.trim().toLowerCase(); void queryClient.invalidateQueries({ queryKey: ['analyse_secteur', uid, key] }); }, }); }