"use client" import type React from "react" import { useState } from "react" import { useRouter } from "next/navigation" import Link from "next/link" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Shield, Building2, TestTube, ArrowLeft, Home, Key, CheckCircle, AlertTriangle, Eye, EyeOff, } from "lucide-react" import { AuthModal } from "@/components/4nk/AuthModal" import { MessageBus } from "@/lib/4nk/MessageBus" import { MockService } from "@/lib/4nk/MockService" import { UserStore } from "@/lib/4nk/UserStore" export default function LoginPage() { const [companyId, setCompanyId] = useState("") const [isAuthModalOpen, setIsAuthModalOpen] = useState(false) const [isLoading, setIsLoading] = useState(false) const [showPairingSection, setShowPairingSection] = useState(false) const [pairingWords, setPairingWords] = useState(["", "", "", ""]) const [pairingError, setPairingError] = useState("") const [pairingSuccess, setPairingSuccess] = useState(false) const router = useRouter() const [showPairingInput, setShowPairingInput] = useState(false) const iframeUrl = process.env.NEXT_PUBLIC_4NK_IFRAME_URL || "https://dev.4nk.io" const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!companyId.trim()) { return } setIsLoading(true) try { // Si l'identifiant est "1234", activer le mode mock directement if (companyId === "1234") { console.log("🎭 Activation du mode mock avec l'identifiant:", companyId) const messageBus = MessageBus.getInstance(iframeUrl) const mockService = MockService.getInstance() const userStore = UserStore.getInstance() // Activer le mode mock messageBus.enableMockMode() // Authentification mock const authResult = await mockService.mockAuthentication(companyId) if (!authResult) { throw new Error("Échec de l'authentification de démonstration") } // Simuler la récupération des tokens const tokens = await mockService.mockRequestLink() userStore.connect(tokens.accessToken, tokens.refreshToken) // Simuler la récupération de l'ID d'appairage const pairingId = await mockService.mockGetUserPairingId() userStore.pair(pairingId) console.log("✅ Mode mock activé avec succès") // Redirection directe vers le dashboard router.push("/dashboard") } else { // Mode normal - ouvrir la modal d'authentification 4NK setIsAuthModalOpen(true) } } catch (error) { console.error("Erreur lors de l'activation du mode mock:", error) // En cas d'erreur, ouvrir quand même la modal d'authentification setIsAuthModalOpen(true) } finally { setIsLoading(false) } } const handleAuthSuccess = () => { setIsAuthModalOpen(false) router.push("/dashboard") } const handlePairingSubmit = async (e: React.FormEvent) => { e.preventDefault() setPairingError("") // Vérifier que tous les mots sont remplis if (pairingWords.some((word) => !word.trim())) { setPairingError("Veuillez saisir les 4 mots de pairing") return } // Simuler la vérification des mots de pairing const validWords = ["alpha", "bravo", "charlie", "delta"] const isValid = pairingWords.every((word, index) => word.toLowerCase().trim() === validWords[index]) if (isValid) { setPairingSuccess(true) setTimeout(() => { // Simuler l'ajout de l'appareil et la connexion const userStore = UserStore.getInstance() const mockService = MockService.getInstance() // Simuler des tokens pour le pairing userStore.connect("paired_access_token", "paired_refresh_token") userStore.pair("paired_device_id") router.push("/dashboard") }, 2000) } else { setPairingError("Mots de pairing incorrects. Vérifiez les mots saisis sur votre autre appareil.") } } const handlePairingWordChange = (index: number, value: string) => { const newWords = [...pairingWords] newWords[index] = value setPairingWords(newWords) setPairingError("") } return (
{/* Lien de retour vers l'accueil */}
Retour Ă  l'accueil
{/* Logo et titre */}

DocV

Gestion électronique de documents sécurisée

{/* Navigation entre connexion et pairing */}
{!showPairingSection ? ( /* Carte de connexion */ Identification d'entreprise Connectez-vous avec votre identifiant unique sécurisé par 4NK
setCompanyId(e.target.value)} required className="w-full" />
{/* Info mode démonstration */}

Mode démonstration

Utilisez l'identifiant "1234" pour accéder directement aux écrans de démonstration avec des données simulées.

) : ( /* Carte de pairing */ Pairing d'appareil Ajoutez cet appareil Ă  votre compte existant {!pairingSuccess ? (

Saisissez les 4 mots affichés sur votre autre appareil

{pairingWords.map((word, index) => ( handlePairingWordChange(index, e.target.value)} className="text-center font-mono select-none" style={{ userSelect: "none", WebkitUserSelect: "none" }} onContextMenu={(e) => e.preventDefault()} onCopy={(e) => e.preventDefault()} onCut={(e) => e.preventDefault()} onPaste={(e) => e.preventDefault()} autoComplete="off" spellCheck={false} required /> ))}
{pairingError && (

{pairingError}

)}

Instructions :

  1. 1. Ouvrez DocV sur votre appareil principal
  2. 2. Allez dans Paramètres → Sécurité
  3. 3. Cliquez sur "Ajouter un appareil"
  4. 4. Saisissez les 4 mots affichés ici
) : (

Pairing réussi !

Cet appareil a été ajouté à votre compte avec succès.

Redirection vers le dashboard...
)}
)} {/* Badges de sécurité */}
Sécurisé 4NK Chiffrement bout en bout Blockchain
{/* Lien vers l'espace public */}
Découvrir DocV sans se connecter
{/* Informations légales */}

En vous connectant, vous acceptez nos conditions d'utilisation

Vos données sont protégées par le chiffrement 4NK

{/* Modal d'authentification 4NK */} setIsAuthModalOpen(false)} iframeUrl={iframeUrl} />
) }