'use client'; import { UserPreferences } from '@/lib/types'; import { Header } from '@/components/ui/Header'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { UserPreferencesProvider } from '@/contexts/UserPreferencesContext'; import Link from 'next/link'; import { useState, useEffect, useTransition } from 'react'; import { backupClient } from '@/clients/backup-client'; import { jiraClient } from '@/clients/jira-client'; import { getSystemInfo } from '@/actions/system-info'; import { SystemInfo } from '@/services/system-info'; interface SettingsIndexPageClientProps { initialPreferences: UserPreferences; initialSystemInfo?: SystemInfo; } export function SettingsIndexPageClient({ initialPreferences, initialSystemInfo }: SettingsIndexPageClientProps) { // États pour les actions const [isBackupLoading, setIsBackupLoading] = useState(false); const [isJiraTestLoading, setIsJiraTestLoading] = useState(false); const [systemInfo, setSystemInfo] = useState(initialSystemInfo || null); const [messages, setMessages] = useState<{ backup?: { type: 'success' | 'error', text: string }; jira?: { type: 'success' | 'error', text: string }; }>({}); // useTransition pour le server action const [isSystemInfoLoading, startTransition] = useTransition(); // Fonction pour recharger les infos système (server action) const loadSystemInfo = () => { startTransition(async () => { try { const result = await getSystemInfo(); if (result.success && result.data) { setSystemInfo(result.data); } else { console.error('Error loading system info:', result.error); } } catch (error) { console.error('Error loading system info:', error); } }); }; // Fonction pour créer une sauvegarde manuelle const handleCreateBackup = async () => { setIsBackupLoading(true); try { const backup = await backupClient.createBackup(); setMessages(prev => ({ ...prev, backup: { type: 'success', text: `Sauvegarde créée: ${backup.filename}` } })); // Recharger les infos système pour mettre à jour le nombre de sauvegardes loadSystemInfo(); } catch { setMessages(prev => ({ ...prev, backup: { type: 'error', text: 'Erreur lors de la création de la sauvegarde' } })); } finally { setIsBackupLoading(false); } }; // Fonction pour tester la connexion Jira const handleTestJira = async () => { setIsJiraTestLoading(true); try { const status = await jiraClient.testConnection(); setMessages(prev => ({ ...prev, jira: { type: status.connected ? 'success' : 'error', text: status.connected ? 'Connexion Jira réussie !' : `Erreur: ${status.message || 'Connexion échouée'}` } })); } catch { setMessages(prev => ({ ...prev, jira: { type: 'error', text: 'Erreur lors du test de connexion Jira' } })); } finally { setIsJiraTestLoading(false); } }; // Auto-dismiss des messages après 5 secondes useEffect(() => { Object.keys(messages).forEach(key => { if (messages[key as keyof typeof messages]) { const timer = setTimeout(() => { setMessages(prev => ({ ...prev, [key]: undefined })); }, 5000); return () => clearTimeout(timer); } }); }, [messages]); const settingsPages = [ { href: '/settings/general', icon: '⚙️', title: 'Paramètres généraux', description: 'Interface, thème, préférences d\'affichage', status: 'Fonctionnel' }, { href: '/settings/integrations', icon: '🔌', title: 'Intégrations', description: 'Jira, GitHub, Slack et autres services externes', status: 'Fonctionnel' }, { href: '/settings/backup', icon: '💾', title: 'Sauvegardes', description: 'Gestion des sauvegardes automatiques et manuelles', status: 'Fonctionnel' }, { href: '/settings/advanced', icon: '🛠️', title: 'Paramètres avancés', description: 'Logs, debug et maintenance système', status: 'Fonctionnel' } ]; return (
{/* Page Header */}

Paramètres

Configuration de TowerControl et de ses intégrations

{/* Quick Stats */}
🎨

Thème actuel

{initialPreferences.viewPreferences.theme}

🔌

Jira

{initialPreferences.jiraConfig.enabled ? 'Configuré' : 'Non configuré'}

{initialPreferences.jiraConfig.enabled && ( )}
📏

Taille police

{initialPreferences.viewPreferences.fontSize}

💾

Sauvegardes

{systemInfo ? systemInfo.database.totalBackups : '...'}

{/* Settings Sections */}

Sections de configuration

{settingsPages.map((page) => (
{page.icon}

{page.title}

{page.description}

{page.status}
))}
{/* Quick Actions */}

Actions rapides

Sauvegarde manuelle

Créer une sauvegarde des données

{messages.backup && (

{messages.backup.text}

)}

Test Jira

Tester la connexion Jira

{messages.jira && (

{messages.jira.text}

)}
{/* System Info */}

ℹ️ Informations système

{systemInfo ? ( <>

Version

TowerControl v{systemInfo.version}

Dernière maj

{systemInfo.lastUpdate}

Environnement

{systemInfo.environment}

Uptime

{systemInfo.uptime}

Base de données

Tâches

{systemInfo.database.totalTasks}

Utilisateurs

{systemInfo.database.totalUsers}

Sauvegardes

{systemInfo.database.totalBackups}

Taille DB

{systemInfo.database.databaseSize}

) : (

Chargement des informations système...

)}
); }