import { useState, useEffect, useCallback } from 'react' import { getLocale } from '@/lib/i18n' export type DocSection = 'user-guide' | 'faq' | 'publishing' | 'payment' | 'fees-and-contributions' export interface DocLink { id: DocSection title: string file: string } export function useDocs(docs: DocLink[]): { selectedDoc: DocSection docContent: string loading: boolean loadDoc: (docId: DocSection) => Promise } { const [selectedDoc, setSelectedDoc] = useState('user-guide') const [docContent, setDocContent] = useState('') const [loading, setLoading] = useState(false) const loadDoc = useCallback( createLoadDoc({ docs, setLoading, setSelectedDoc, setDocContent, }), [docs] ) useEffect(() => { void loadDoc('user-guide') }, [loadDoc]) return { selectedDoc, docContent, loading, loadDoc, } } function createLoadDoc(params: { docs: DocLink[] setSelectedDoc: (doc: DocSection) => void setDocContent: (value: string) => void setLoading: (value: boolean) => void }): (docId: DocSection) => Promise { return async (docId: DocSection): Promise => { const doc = params.docs.find((d) => d.id === docId) if (!doc) { return } params.setLoading(true) params.setSelectedDoc(docId) try { const text = await fetchDocContent(doc.file) params.setDocContent(text) } catch (error) { console.error('[useDocs] Error loading doc:', error) params.setDocContent(await buildDocLoadErrorMarkdown()) } finally { params.setLoading(false) } } } async function fetchDocContent(docFile: string): Promise { const locale = getLocale() const response = await globalThis.fetch(`/api/docs/${docFile}?locale=${locale}`) if (!response.ok) { throw new Error('DOC_FETCH_FAILED') } return response.text() } async function buildDocLoadErrorMarkdown(): Promise { // Import t dynamically to avoid circular dependency const { t } = await import('@/lib/i18n') return `# ${t('docs.error')}\n\n${t('docs.error.loadFailed')}` }