import { useCallback, useEffect, useState } from 'react' import { fetchAuthorByHashId } from '@/lib/authorQueries' import { getSeriesByAuthor } from '@/lib/seriesQueries' import { getAuthorSponsoring } from '@/lib/sponsoring' import { nostrService } from '@/lib/nostr' import type { AuthorPresentationArticle, Series } from '@/types/nostr' async function loadAuthorData(hashId: string): Promise<{ pres: AuthorPresentationArticle | null seriesList: Series[] sponsoring: number }> { const pool = nostrService.getPool() if (!pool) { throw new Error('Pool not initialized') } const pres = await fetchAuthorByHashId(pool, hashId) if (!pres) { return { pres: null, seriesList: [], sponsoring: 0 } } const [seriesList, sponsoring] = await Promise.all([ getSeriesByAuthor(pres.pubkey), getAuthorSponsoring(pres.pubkey), ]) return { pres, seriesList, sponsoring } } export function useAuthorData(hashIdOrPubkey: string): { presentation: AuthorPresentationArticle | null series: Series[] totalSponsoring: number loading: boolean error: string | null reload: () => Promise } { const [presentation, setPresentation] = useState(null) const [series, setSeries] = useState([]) const [totalSponsoring, setTotalSponsoring] = useState(0) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const reload = useCallback(async (): Promise => { if (!hashIdOrPubkey) { return } setLoading(true) setError(null) try { const { pres, seriesList, sponsoring } = await loadAuthorData(hashIdOrPubkey) setPresentation(pres) setSeries(seriesList) setTotalSponsoring(sponsoring) } catch (e) { setError(e instanceof Error ? e.message : 'Erreur lors du chargement') } finally { setLoading(false) } }, [hashIdOrPubkey]) useEffect(() => { void reload() }, [hashIdOrPubkey, reload]) return { presentation, series, totalSponsoring, loading, error, reload } }