import { useState, useEffect, useCallback } from 'react'; import { usePlaybasis } from '../PlaybasisProvider'; import type { Quest } from '../types'; interface UseQuestsReturn { quests: Quest[]; completedQuests: Quest[]; activeQuests: Quest[]; loading: boolean; error: Error | null; refresh: () => Promise; } export function useQuests(): UseQuestsReturn { const { client, playerId } = usePlaybasis(); const [quests, setQuests] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchQuests = useCallback(async () => { if (!playerId) { setQuests([]); setLoading(false); return; } setLoading(true); setError(null); try { const playerQuests = await client.getPlayerQuests(playerId); setQuests(playerQuests); } catch (err) { setError(err instanceof Error ? err : new Error('Failed to fetch quests')); } finally { setLoading(false); } }, [client, playerId]); useEffect(() => { fetchQuests(); }, [fetchQuests]); const activeQuests = quests.filter( (q) => q.status === 'in_progress' || q.status === 'not_started', ); const completedQuests = quests.filter((q) => q.status === 'completed'); return { quests, activeQuests, completedQuests, loading, error, refresh: fetchQuests, }; } export default useQuests;