'use client'; import { useState } from 'react'; import { UserPreferences } from '@/lib/types'; import { Header } from '@/components/ui/Header'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { UserPreferencesProvider } from '@/contexts/UserPreferencesContext'; import { backupClient, BackupListResponse } from '@/clients/backup-client'; import Link from 'next/link'; interface DatabaseStats { taskCount: number; tagCount: number; completionRate: number; } interface AdvancedSettingsPageClientProps { initialPreferences: UserPreferences; initialDbStats: DatabaseStats; initialBackupData: BackupListResponse; } export function AdvancedSettingsPageClient({ initialPreferences, initialDbStats, initialBackupData }: AdvancedSettingsPageClientProps) { const [backupData, setBackupData] = useState(initialBackupData); const [dbStats] = useState(initialDbStats); const [isCreatingBackup, setIsCreatingBackup] = useState(false); const [isVerifying, setIsVerifying] = useState(false); const reloadBackupData = async () => { try { const data = await backupClient.listBackups(); setBackupData(data); } catch (error) { console.error('Failed to reload backup data:', error); } }; const handleCreateBackup = async () => { setIsCreatingBackup(true); try { await backupClient.createBackup(); await reloadBackupData(); } catch (error) { console.error('Failed to create backup:', error); } finally { setIsCreatingBackup(false); } }; const handleVerifyDatabase = async () => { setIsVerifying(true); try { await backupClient.verifyDatabase(); alert('✅ Base de données vérifiée avec succès'); } catch (error) { console.error('Database verification failed:', error); alert('❌ Erreur lors de la vérification de la base'); } finally { setIsVerifying(false); } }; const formatFileSize = (bytes: number): string => { const units = ['B', 'KB', 'MB', 'GB']; let size = bytes; let unitIndex = 0; while (size >= 1024 && unitIndex < units.length - 1) { size /= 1024; unitIndex++; } return `${size.toFixed(1)} ${units[unitIndex]}`; }; const formatTimeAgo = (date: Date): string => { const now = new Date(); const diffMs = now.getTime() - new Date(date).getTime(); const diffMins = Math.floor(diffMs / (1000 * 60)); const diffHours = Math.floor(diffMins / 60); const diffDays = Math.floor(diffHours / 24); if (diffMins < 60) { return `il y a ${diffMins}min`; } else if (diffHours < 24) { return `il y a ${diffHours}h ${diffMins % 60}min`; } else { return `il y a ${diffDays}j`; } }; const getNextBackupTime = (): string => { if (!backupData.scheduler.nextBackup) return 'Non planifiée'; const nextBackup = new Date(backupData.scheduler.nextBackup); const now = new Date(); const diffMs = nextBackup.getTime() - now.getTime(); const diffMins = Math.floor(diffMs / (1000 * 60)); const diffHours = Math.floor(diffMins / 60); if (diffMins < 60) { return `dans ${diffMins}min`; } else { return `dans ${diffHours}h ${diffMins % 60}min`; } }; return (
{/* Breadcrumb */}
Paramètres / Avancé
{/* Page Header */}

🛠️ Paramètres avancés

Configuration système, sauvegarde et outils de développement

{/* Sauvegarde et données */}

💾 Sauvegarde et données

Gestion des sauvegardes automatiques et manuelles

Sauvegarde automatique

{backupData.scheduler.isEnabled ? `Sauvegarde ${backupData.scheduler.interval === 'hourly' ? 'toutes les heures' : backupData.scheduler.interval === 'daily' ? 'quotidienne' : 'hebdomadaire'}` : 'Sauvegarde automatique désactivée' }

{backupData.scheduler.isRunning ? `Prochaine sauvegarde: ${getNextBackupTime()}` : 'Planificateur arrêté' }

Sauvegardes disponibles

{backupData.backups.length} sauvegarde{backupData.backups.length > 1 ? 's' : ''} conservée{backupData.backups.length > 1 ? 's' : ''}

{backupData.backups.length > 0 ? (

Dernière: {formatTimeAgo(backupData.backups[0].createdAt)} ({formatFileSize(backupData.backups[0].size)})

) : (

Aucune sauvegarde disponible

)}
{/* Base de données */}

🗄️ Base de données

Informations et maintenance de la base de données

Tâches

{dbStats.taskCount}

entrées

Tags

{dbStats.tagCount}

entrées

Taux complétion

{dbStats.completionRate}

%

); }