import React, { useState, useEffect } from 'react'; import { Card } from '../ui/card'; import { Button } from '../ui/button'; import { Save, AlertTriangle, Server, Activity, Loader2 } from 'lucide-react'; import { useToast } from '../../components/feedback/ToastProvider'; import { adminService } from '../../services/adminService'; import { logger } from '@/utils/logger'; interface FeatureFlag { name: string; enabled: boolean; description?: string; } interface Announcement { id: string; title: string; content: string; type: string; is_active: boolean; } export const AdminSettingsView: React.FC = () => { const { addToast } = useToast(); const [maintenance, setMaintenance] = useState(false); const [maintenanceLoading, setMaintenanceLoading] = useState(true); const [uploadLimit, setUploadLimit] = useState(500); const [announcements, setAnnouncements] = useState([]); const [announcementsLoading, setAnnouncementsLoading] = useState(true); const [featureFlags, setFeatureFlags] = useState([]); const [flagsLoading, setFlagsLoading] = useState(true); const [newAnnouncementTitle, setNewAnnouncementTitle] = useState(''); const [newAnnouncementContent, setNewAnnouncementContent] = useState(''); useEffect(() => { const load = async () => { try { const [mm, flags, ann] = await Promise.all([ adminService.getMaintenanceMode(), adminService.getFeatureFlags(), adminService.getAnnouncements(), ]); setMaintenance(mm); setFeatureFlags(flags); setAnnouncements(ann); } catch (e) { logger.error('Admin settings load failed', { error: e }); addToast('Failed to load settings', 'error'); } finally { setMaintenanceLoading(false); setFlagsLoading(false); setAnnouncementsLoading(false); } }; load(); }, []); const handleMaintenanceToggle = async () => { const next = !maintenance; try { await adminService.setMaintenanceMode(next); setMaintenance(next); addToast(next ? 'Maintenance mode enabled' : 'Maintenance mode disabled', 'success'); } catch { addToast('Failed to update maintenance mode', 'error'); } }; const handleFlagToggle = async (name: string, enabled: boolean) => { try { await adminService.toggleFeatureFlag(name, enabled); setFeatureFlags((prev) => prev.map((f) => (f.name === name ? { ...f, enabled } : f))); addToast(`Feature ${name} ${enabled ? 'enabled' : 'disabled'}`, 'success'); } catch { addToast('Failed to toggle feature flag', 'error'); } }; const handleCreateAnnouncement = async () => { if (!newAnnouncementTitle.trim() || !newAnnouncementContent.trim()) { addToast('Title and content required', 'error'); return; } try { await adminService.createAnnouncement({ title: newAnnouncementTitle.trim(), content: newAnnouncementContent.trim(), }); const ann = await adminService.getAnnouncements(); setAnnouncements(ann); setNewAnnouncementTitle(''); setNewAnnouncementContent(''); addToast('Announcement created', 'success'); } catch { addToast('Failed to create announcement', 'error'); } }; const handleDeleteAnnouncement = async (id: string) => { try { await adminService.deleteAnnouncement(id); setAnnouncements((prev) => prev.filter((a) => a.id !== id)); addToast('Announcement deleted', 'success'); } catch { addToast('Failed to delete announcement', 'error'); } }; const handleSave = () => { addToast('System settings updated', 'success'); }; return (

SYSTEM SETTINGS

Global configuration and feature management.

{/* General Config */}

General Configuration

setUploadLimit(Number(e.target.value))} />

Maximum file size for standard users.

{/* Feature Flags */}

Feature Flags

{flagsLoading ? (
Loading...
) : (
{featureFlags.map((flag) => (
{flag.name} {flag.description && (

{flag.description}

)}
))}
)}
{/* Maintenance */}

Emergency & Maintenance

Maintenance Mode
Disable access for non-admin users
{maintenanceLoading ? ( ) : ( )}
setNewAnnouncementTitle(e.target.value)} />