'use client'; import { useState, useEffect, useCallback } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { LeagueDetailTemplate } from '@/templates/LeagueDetailTemplate'; import { useServices } from '@/lib/services/ServiceProvider'; import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import { useSponsorMode } from '@/components/sponsors/SponsorInsightsCard'; import { LeagueDetailPageViewModel } from '@/lib/view-models/LeagueDetailPageViewModel'; import EndRaceModal from '@/components/leagues/EndRaceModal'; export default function LeagueDetailInteractive() { const router = useRouter(); const params = useParams(); const leagueId = params.id as string; const isSponsor = useSponsorMode(); const { leagueService, leagueMembershipService, raceService } = useServices(); const [viewModel, setViewModel] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [endRaceModalRaceId, setEndRaceModalRaceId] = useState(null); const currentDriverId = useEffectiveDriverId(); const membership = leagueMembershipService.getMembership(leagueId, currentDriverId); const loadLeagueData = async () => { try { const viewModelData = await leagueService.getLeagueDetailPageData(leagueId); if (!viewModelData) { setError('League not found'); setLoading(false); return; } setViewModel(viewModelData); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load league'); } finally { setLoading(false); } }; useEffect(() => { loadLeagueData(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [leagueId]); const handleMembershipChange = () => { loadLeagueData(); }; const handleEndRaceModalOpen = (raceId: string) => { setEndRaceModalRaceId(raceId); }; const handleLiveRaceClick = (raceId: string) => { router.push(`/races/${raceId}`); }; const handleBackToLeagues = () => { router.push('/leagues'); }; const handleEndRaceConfirm = async () => { if (!endRaceModalRaceId) return; try { await raceService.completeRace(endRaceModalRaceId); await loadLeagueData(); setEndRaceModalRaceId(null); } catch (err) { alert(err instanceof Error ? err.message : 'Failed to complete race'); } }; const handleEndRaceCancel = () => { setEndRaceModalRaceId(null); }; if (loading) { return (
Loading league...
); } if (error || !viewModel) { return (
{error || 'League not found'}
); } return ( <> {/* End Race Modal */} {endRaceModalRaceId && viewModel && (() => { const race = viewModel.runningRaces.find(r => r.id === endRaceModalRaceId); return race ? ( ) : null; })()} ); }