import { useState, useEffect, useCallback } from "react"; import { type DirectiveOrderGroup, type CreateDOGRequest, type UpdateDOGRequest, listDogs, createDog, getDog, updateDog as updateDogApi, deleteDog as deleteDogApi, pickUpDogOrders as pickUpDogOrdersApi, } from "../lib/api"; export function useDogs(directiveId: string | undefined) { const [dogs, setDogs] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const refresh = useCallback(async () => { if (!directiveId) return; try { setLoading(true); setError(null); const res = await listDogs(directiveId); setDogs(res.dogs); } catch (e) { setError(e instanceof Error ? e.message : "Failed to load DOGs"); } finally { setLoading(false); } }, [directiveId]); useEffect(() => { refresh(); }, [refresh]); const create = useCallback(async (req: CreateDOGRequest) => { if (!directiveId) return null; const dog = await createDog(directiveId, req); await refresh(); return dog; }, [directiveId, refresh]); const update = useCallback(async (dogId: string, req: UpdateDOGRequest) => { if (!directiveId) return; await updateDogApi(directiveId, dogId, req); await refresh(); }, [directiveId, refresh]); const remove = useCallback(async (dogId: string) => { if (!directiveId) return; await deleteDogApi(directiveId, dogId); await refresh(); }, [directiveId, refresh]); const pickUpOrders = useCallback(async (dogId: string) => { if (!directiveId) return null; const result = await pickUpDogOrdersApi(directiveId, dogId); await refresh(); return result; }, [directiveId, refresh]); return { dogs, loading, error, refresh, create, update, remove, pickUpOrders }; } export function useDog(directiveId: string | undefined, dogId: string | undefined) { const [dog, setDog] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const refresh = useCallback(async () => { if (!directiveId || !dogId) return; try { setLoading(true); setError(null); const d = await getDog(directiveId, dogId); setDog(d); } catch (e) { setError(e instanceof Error ? e.message : "Failed to load DOG"); } finally { setLoading(false); } }, [directiveId, dogId]); useEffect(() => { setDog(null); setError(null); setLoading(true); refresh(); }, [directiveId, dogId]); // eslint-disable-line react-hooks/exhaustive-deps const update = useCallback(async (req: UpdateDOGRequest) => { if (!directiveId || !dogId) return; const d = await updateDogApi(directiveId, dogId, req); setDog(d); return d; }, [directiveId, dogId]); const remove = useCallback(async () => { if (!directiveId || !dogId) return; await deleteDogApi(directiveId, dogId); }, [directiveId, dogId]); const pickUpOrders = useCallback(async () => { if (!directiveId || !dogId) return null; const result = await pickUpDogOrdersApi(directiveId, dogId); await refresh(); return result; }, [directiveId, dogId, refresh]); return { dog, loading, error, refresh, update, remove, pickUpOrders }; }