'use client'; import { Building, AlertCircle, Lock, Loader2, ArrowLeft, MapPin, Calendar, Server } from 'lucide-react'; import Link from 'next/link'; import { useEffect, useState } from 'react'; import { getAdminClubDetail } from '@/src/lib/api/admin-clubs'; import type { AdminClubDetail, AdminApiError } from '@/src/types/admin-api'; import useTranslation from '@/src/hooks/useTranslation'; interface AdminClubDetailProps { clubId: number; } export default function AdminClubDetailComponent({ clubId }: AdminClubDetailProps) { const { t, locale } = useTranslation(); const [clubDetail, setClubDetail] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { async function loadClubDetail() { setLoading(true); const result = await getAdminClubDetail(clubId); if (result.success) { setClubDetail(result.data); setError(null); } else { setError(result.error); setClubDetail(null); } setLoading(false); } loadClubDetail(); }, [clubId]); // Loading state if (loading) { return (

{t('Loading club details...')}

); } // Authentication error (401) if (error && error.status === 401) { return (

{t('Authentication Required')}

{t('Please log in to access the venue management portal.')}

); } // Forbidden error (403) if (error && error.status === 403) { return (

{t('Access Denied')}

{error.detail}

{t('Back to clubs')}
); } // Other API errors if (error) { return (

{t('Error Loading Club')}

{error.detail}

{t('Error code')}: {error.code}

{t('Back to clubs')}
); } if (!clubDetail) { return null; } // Success - render club detail return (
{/* Breadcrumb */}
{t('Back to clubs')}
{/* Club Header */}

{clubDetail.club.name}

{clubDetail.club.timezone}
{/* Provider Info */}

{t('Provider Information')}

{t('Type')}: {clubDetail.provider.remote_type}
{t('Manages Slot Storage')}: {clubDetail.provider.capabilities.manages_slot_storage ? t('Yes') : t('No')}
{t('Supports Payment Verification')}: {clubDetail.provider.capabilities.supports_payment_verification ? t('Yes') : t('No')}
{/* Courts */}

{t('Courts')}

{clubDetail.courts.length === 0 ? (

{t('No courts configured')}

) : (
{clubDetail.courts.map((court) => (

{court.name}

))}
)}
{/* Slot Definitions */}

{t('Slot Definitions')}

{clubDetail.slot_definitions.length === 0 ? (

{t('No slot definitions configured')}

) : (
{clubDetail.slot_definitions.map((slotDef, index) => (

{t('Slot definition')} #{index + 1}

))}
)}
{/* Upcoming Slots */}

{t('Upcoming Slots')}

{clubDetail.upcoming_slots.length === 0 ? (

{t('No upcoming slots available')}

) : (
{clubDetail.upcoming_slots.map((slot, index) => (

{t('Slot')} #{index + 1}

))}
)}
); }