'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { Settings, Key, BarChart3, Globe, ArrowLeft, Save, RefreshCw, Eye, EyeOff, Check, AlertCircle, } from 'lucide-react'; import { ApiStatsChart } from './_components/api-stats-chart'; interface SettingsData { id: string; apiKey: string | null; selectedLeague: string; leagueId: number; season: number; siteName: string; primaryColor: string; secondaryColor: string; showLiveMatches: boolean; showStandings: boolean; showTopScorers: boolean; showRecentResults: boolean; showUpcoming: boolean; refreshInterval: number; } interface ApiStats { totalRequests: number; requestsToday: number; requestsByEndpoint: { endpoint: string; count: number }[]; chartData: { time: string; count: number }[]; avgResponseTime: number; successRate: number; } export default function AdminPage() { const [settings, setSettings] = useState(null); const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [showApiKey, setShowApiKey] = useState(false); const [saveSuccess, setSaveSuccess] = useState(false); const [error, setError] = useState(null); useEffect(() => { fetchData(); }, []); const fetchData = async () => { try { setLoading(true); const [settingsRes, statsRes] = await Promise.all([ fetch('/api/admin/settings'), fetch('/api/admin/stats'), ]); if (settingsRes.ok) { const settingsData = await settingsRes.json(); setSettings(settingsData); } if (statsRes.ok) { const statsData = await statsRes.json(); setStats(statsData); } } catch (err) { setError('Failed to load data'); console.error(err); } finally { setLoading(false); } }; const saveSettings = async () => { if (!settings) return; try { setSaving(true); setError(null); const res = await fetch('/api/admin/settings', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(settings), }); if (res.ok) { const updatedSettings = await res.json(); setSettings(updatedSettings); setSaveSuccess(true); setTimeout(() => setSaveSuccess(false), 3000); } else { setError('Failed to save settings'); } } catch (err) { setError('Failed to save settings'); console.error(err); } finally { setSaving(false); } }; const updateSetting = ( key: K, value: SettingsData[K] ) => { if (settings) { setSettings({ ...settings, [key]: value }); } }; if (loading) { return (
); } return (
{/* Header */}
Back to Site

Backoffice

{error && (
{error}
)}
{/* Layout Settings */}

Layout Settings

updateSetting('siteName', e.target.value)} className="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white focus:ring-2 focus:ring-green-500 focus:border-transparent" />
updateSetting('primaryColor', e.target.value) } className="w-12 h-10 rounded cursor-pointer" /> updateSetting('primaryColor', e.target.value) } className="flex-1 px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white text-sm" />
updateSetting('secondaryColor', e.target.value) } className="w-12 h-10 rounded cursor-pointer" /> updateSetting('secondaryColor', e.target.value) } className="flex-1 px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white text-sm" />
updateSetting('refreshInterval', parseInt(e.target.value)) } className="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white focus:ring-2 focus:ring-green-500 focus:border-transparent" />
{[ { key: 'showLiveMatches', label: 'Live Matches' }, { key: 'showStandings', label: 'Standings Table' }, { key: 'showTopScorers', label: 'Top Scorers' }, { key: 'showRecentResults', label: 'Recent Results' }, { key: 'showUpcoming', label: 'Upcoming Fixtures' }, ].map((item) => ( ))}
{/* API Key Management */}

API Key Management

updateSetting('apiKey', e.target.value)} placeholder="Enter your API key" className="w-full px-4 py-2 pr-12 bg-gray-700 border border-gray-600 rounded-lg text-white focus:ring-2 focus:ring-yellow-500 focus:border-transparent font-mono" />

Get your API key from{' '} api-football.com

API Status

{settings?.apiKey ? ( <>
API Key Configured ) : ( <>
No API Key Set )}
{/* League Switcher */}

League Selection

Current Configuration

League ID:
{settings?.leagueId}
Season:
{settings?.season}
{/* API Statistics */}

API Statistics

{stats?.totalRequests || 0}
Total Requests
{stats?.requestsToday || 0}
Requests Today
{stats?.avgResponseTime || 0}ms
Avg Response Time
{stats?.successRate || 100}%
Success Rate
{stats?.requestsByEndpoint && stats.requestsByEndpoint.length > 0 && (

Requests by Endpoint

{stats.requestsByEndpoint.map((item) => (
{item.endpoint} {item.count}
))}
)}
); }