"use client" import type React from "react" import { useState, useEffect, useCallback } from "react" import { useRouter, usePathname } from "next/navigation" import Link from "next/link" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Shield, Settings, Bell, LogOut, ChevronDown, Home, TestTube, User, Copy, CheckCircle, } from "@/lib/icons" import UserStore from "@/lib/4nk/UserStore" import EventBus from "@/lib/4nk/EventBus" import AuthModal from "@/components/4nk/AuthModal" import Iframe from "@/components/4nk/Iframe" import { iframeUrl } from "../page" import { FourNKProvider, use4NK } from "@/lib/contexts/FourNKContext"; // Composant interne qui utilise le contexte 4NK function DashboardLayoutContent({ children }: { children: React.ReactNode }) { const [isConnected, setIsConnected] = useState(false) const [userPairingId, setUserPairingId] = useState(null) const [isAuthenticated, setIsAuthenticated] = useState(false) const [isAuthModalOpen, setIsAuthModalOpen] = useState(false) const [show4nkAuthModal, setShow4nkAuthModal] = useState(false) const [isLoading, setIsLoading] = useState(true) const [isMockMode, setIsMockMode] = useState(true) const [userInfo, setUserInfo] = useState(null) const [showLogoutConfirm, setShowLogoutConfirm] = useState(false) const [isCopied, setIsCopied] = useState(false) const router = useRouter() // Récupérer les données du contexte 4NK const { userName } = use4NK() useEffect(() => { try { const saved = typeof window !== 'undefined' ? localStorage.getItem('theme') : null const dark = saved ? saved === 'dark' : (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches) if (typeof document !== 'undefined') { document.documentElement.classList.toggle('dark', !!dark) } } catch { } }, []) useEffect(() => { const connected = UserStore.getInstance().isConnected(); setIsConnected(connected); if (!connected) { setShow4nkAuthModal(true); } }, []); useEffect(() => { const pairingId = UserStore.getInstance().getUserPairingId(); setUserPairingId(pairingId); }, []); useEffect(() => { const checkAuthentication = async () => { try { const userStore = UserStore.getInstance() const accessToken = userStore.getAccessToken() if (accessToken && userName !== null) { setIsAuthenticated(true) const pairingId = userStore.getUserPairingId() setUserInfo({ id: pairingId?.slice(0, 8) + "...", name: userName, email: "user@4nk.io", role: "Utilisateur", company: "Organisation 4NK", }) } } catch (error) { console.error("Error checking authentication:", error) setIsAuthModalOpen(true) } finally { setIsLoading(false) } } checkAuthentication() }, [iframeUrl, userName]) const handle4nkConnect = useCallback(() => { setIsConnected(true); setShow4nkAuthModal(false); }, []); const handle4nkClose = useCallback(() => { if (!isConnected) return; setShow4nkAuthModal(false); }, [isConnected]); const handleLogout = useCallback(() => { UserStore.getInstance().disconnect(); setIsConnected(false); setUserPairingId(null); EventBus.getInstance().emit('CLEAR_CONSOLE'); setShowLogoutConfirm(true) }, []); const handleCopyToClipboard = useCallback(() => { if (userPairingId) { navigator.clipboard.writeText(userPairingId).then(() => { setIsCopied(true); setTimeout(() => setIsCopied(false), 2000); }).catch(err => { console.error('Erreur lors de la copie : ', err); }); } }, [userPairingId]); return (
{/* Main content (prend tout l'écran) */}
{/* --- TOP BAR (MODIFIÉE) --- */}
{/* Partie Gauche: Logo */}
DocV {isMockMode && ( Démo )}
{/* Partie Droite: Icônes + Profil Utilisateur */}
{/* TODO: Icone de cloche pour une future lsite de notifications */}

{userInfo?.id}

{userInfo?.name}

{userInfo?.company}

Profil Paramètres Déconnexion
{/* Page content */}
{children}
{/* --- Modal de déconnexion --- */} {showLogoutConfirm && (

Déconnexion réussie

Vous avez été déconnecté de votre espace sécurisé DocV.

Vos données restent sécurisées par le chiffrement 4NK

)} {/* --- Modals 4NK --- */} {show4nkAuthModal && ( )} {isConnected &&