import React, { useState } from 'react'; import { HardDrive, Settings, History, Play, RefreshCw, AlertCircle, CheckCircle, Calendar, Database, FileArchive, Cloud, Server, Loader2, Info, Shield, Clock, Download, Upload, Trash2, Search, Filter } from 'lucide-react'; import { toast } from 'react-toastify'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { format } from 'date-fns'; import { Button, Card, Loading } from '../../components/common'; import { BackupDashboard } from '../../components/admin/BackupDashboard'; import { BackupConfiguration } from '../../components/admin/BackupConfiguration'; import { BackupHistory } from '../../components/admin/BackupHistory'; import { RestoreWizard } from '../../components/admin/RestoreWizard'; import { api } from '../../config/api'; // Tab components const tabs = [ { id: 'dashboard', label: 'Dashboard', icon: HardDrive }, { id: 'configuration', label: 'Configuration', icon: Settings }, { id: 'history', label: 'Backup History', icon: History }, { id: 'restore', label: 'Restore', icon: RefreshCw } ]; export const BackupManagement = () => { const [activeTab, setActiveTab] = useState('dashboard'); const queryClient = useQueryClient(); // Fetch backup status const { data: backupStatus, isLoading: statusLoading } = useQuery({ queryKey: ['backup-status'], queryFn: async () => { const response = await api.get('/admin/backup/status'); return response.data; }, refetchInterval: 10000 // Refresh every 10 seconds }); // Fetch backup configuration const { data: backupConfig, isLoading: configLoading } = useQuery({ queryKey: ['backup-config'], queryFn: async () => { const response = await api.get('/admin/backup/config'); return response.data; } }); // Trigger manual backup const manualBackupMutation = useMutation({ mutationFn: async () => { const response = await api.post('/admin/backup/run'); return response.data; }, onSuccess: () => { toast.success('Backup started successfully'); queryClient.invalidateQueries({ queryKey: ['backup-status'] }); }, onError: (error) => { const message = error.response?.data?.error || 'Failed to start backup'; toast.error(message); } }); // Update configuration const updateConfigMutation = useMutation({ mutationFn: async (config) => { const response = await api.put('/admin/backup/config', config); return response.data; }, onSuccess: () => { toast.success('Backup configuration updated'); queryClient.invalidateQueries({ queryKey: ['backup-config'] }); }, onError: (error) => { const message = error.response?.data?.error || 'Failed to update configuration'; toast.error(message); } }); if (statusLoading || configLoading) { return (
); } return (
{/* Header */}

Backup Management

Manage system backups, configure automated backups, and restore from previous backups.

{/* Status Bar */}
{backupStatus?.isRunning ? ( <> Backup in progress... ) : backupStatus?.lastBackup ? ( <> Last backup: {format(new Date(backupStatus.lastBackup.created_at), 'PPp')} ) : ( <> No backups found )}
{backupConfig?.backup_enabled && (
Next backup: {backupStatus?.nextBackup || 'Not scheduled'}
)}
{backupConfig?.backup_enabled ? 'Enabled' : 'Disabled'}
{/* Tabs */}
{/* Tab Content */}
{activeTab === 'dashboard' && ( manualBackupMutation.mutate()} isBackupRunning={backupStatus?.isRunning || manualBackupMutation.isLoading} /> )} {activeTab === 'configuration' && ( updateConfigMutation.mutate(newConfig)} isSaving={updateConfigMutation.isLoading} /> )} {activeTab === 'history' && ( )} {activeTab === 'restore' && ( )}
); };