import { useState, useEffect } from 'react'; import { getVideoDetail, getPlayUrl } from '../services/bilibili'; import type { VideoItem } from '../services/types'; export function useVideoDetail(bvid: string) { const [video, setVideo] = useState(null); const [streamUrl, setStreamUrl] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function fetchData() { try { setLoading(true); const detail = await getVideoDetail(bvid); setVideo(detail); const cid = detail.pages?.[0]?.cid ?? detail.cid; const playData = await getPlayUrl(bvid, cid); setStreamUrl(playData.durl[0]?.url ?? null); } catch (e: any) { setError(e.message ?? 'Load failed'); } finally { setLoading(false); } } if (bvid) fetchData(); }, [bvid]); return { video, streamUrl, loading, error }; }