'use client'; import { ReadonlyLeagueInfo } from '@/components/leagues/ReadonlyLeagueInfo'; import DriverSummaryPill from '@/components/profile/DriverSummaryPill'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import { isLeagueAdminOrHigherRole } from '@/lib/leagueRoles'; import { useServices } from '@/lib/services/ServiceProvider'; import type { LeagueConfigFormModel } from '@core/racing/application'; import { LeagueSettingsViewModel } from '@/lib/view-models/LeagueSettingsViewModel'; import { AlertTriangle, Settings, UserCog } from 'lucide-react'; import { useParams, useRouter } from 'next/navigation'; import { useEffect, useMemo, useState } from 'react'; export default function LeagueSettingsPage() { const params = useParams(); const leagueId = params.id as string; const currentDriverId = useEffectiveDriverId(); const { leagueMembershipService, leagueSettingsService } = useServices(); const [settings, setSettings] = useState(null); const [loading, setLoading] = useState(true); const [isAdmin, setIsAdmin] = useState(false); const [showTransferDialog, setShowTransferDialog] = useState(false); const [selectedNewOwner, setSelectedNewOwner] = useState(''); const [transferring, setTransferring] = useState(false); const router = useRouter(); useEffect(() => { async function checkAdmin() { const memberships = await leagueMembershipService.fetchLeagueMemberships(leagueId); const membership = leagueMembershipService.getMembership(leagueId, currentDriverId); setIsAdmin(membership ? isLeagueAdminOrHigherRole(membership.role) : false); } checkAdmin(); }, [leagueId, currentDriverId, leagueMembershipService]); useEffect(() => { async function loadSettings() { setLoading(true); try { const settingsData = await leagueSettingsService.getLeagueSettings(leagueId); if (settingsData) { setSettings(settingsData); } } catch (err) { console.error('Failed to load league settings:', err); } finally { setLoading(false); } } if (isAdmin) { loadSettings(); } }, [leagueId, isAdmin, leagueSettingsService]); const ownerSummary = settings?.owner || null; const handleTransferOwnership = async () => { if (!selectedNewOwner || !settings) return; setTransferring(true); try { await leagueSettingsService.transferOwnership(leagueId, currentDriverId, selectedNewOwner); setShowTransferDialog(false); router.refresh(); } catch (err) { console.error('Failed to transfer ownership:', err); alert(err instanceof Error ? err.message : 'Failed to transfer ownership'); } finally { setTransferring(false); } }; if (!isAdmin) { return (

Admin Access Required

Only league admins can access settings.

); } if (loading) { return (
Loading configuration…
); } if (!settings) { return (
Unable to load league configuration for this demo league.
); } return (
{/* Header */}

League Settings

Manage your league configuration

{/* READONLY INFORMATION SECTION - Compact */}
{/* League Owner - Compact */}

League Owner

{ownerSummary ? ( ) : (

Loading owner details...

)}
{/* Transfer Ownership - Owner Only */} {settings.league.ownerId === currentDriverId && settings.members.length > 0 && (

Transfer Ownership

Transfer league ownership to another active member. You will become an admin.

{!showTransferDialog ? ( ) : (
)}
)}
); }