"use client"
import { useState, useEffect } from "react"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Textarea } from "@/components/ui/textarea"
import {
MessageSquare,
Search,
Plus,
Send,
Paperclip,
Smile,
Phone,
Video,
MoreHorizontal,
Users,
Circle,
CheckCheck,
Clock,
File,
Download,
Brain,
Shield,
TrendingUp,
CheckCircle,
FileText,
BarChart3,
Zap,
} from "lucide-react"
import { useSearchParams } from "next/navigation"
export default function ChatPage() {
const [selectedConversation, setSelectedConversation] = useState("1")
const [newMessage, setNewMessage] = useState("")
const [searchTerm, setSearchTerm] = useState("")
const searchParams = useSearchParams()
const userId = searchParams.get("user")
const messageType = searchParams.get("message")
const groupType = searchParams.get("type")
useEffect(() => {
// Gérer les nouveaux messages depuis les autres pages
if (messageType === "new") {
if (userId) {
// Message individuel
const messageData = sessionStorage.getItem("newMessage")
if (messageData) {
const data = JSON.parse(messageData)
console.log("Nouveau message individuel:", data)
// Créer ou ouvrir la conversation avec cet utilisateur
setSelectedConversation(userId)
// Ajouter le message pré-rempli
setNewMessage(`${data.subject ? `[${data.subject}] ` : ""}${data.content}`)
// Nettoyer le sessionStorage
sessionStorage.removeItem("newMessage")
// Notification
showNotification("info", `Conversation ouverte avec ${data.userName}`)
}
} else if (groupType === "group") {
// Message de groupe
const groupData = sessionStorage.getItem("newGroupMessage")
if (groupData) {
const data = JSON.parse(groupData)
console.log("Nouveau message de groupe:", data)
// Créer une nouvelle conversation de groupe
const groupName = `Groupe (${data.users.length} membres)`
setSelectedConversation("group-new")
// Ajouter le message pré-rempli
setNewMessage(`${data.subject ? `[${data.subject}] ` : ""}${data.content}`)
// Nettoyer le sessionStorage
sessionStorage.removeItem("newGroupMessage")
// Notification
showNotification("info", `Conversation de groupe créée avec ${data.users.length} utilisateur(s)`)
}
}
}
}, [userId, messageType, groupType])
const showNotification = (type: "success" | "error" | "info", message: string) => {
// Implémenter la notification (peut utiliser toast ou état local)
console.log(`${type.toUpperCase()}: ${message}`)
}
const conversations = [
{
id: "1",
name: "Marie Dubois",
type: "direct",
avatar: "MD",
lastMessage: "Parfait, merci pour la validation !",
lastMessageTime: "14:32",
unreadCount: 0,
isOnline: true,
isTyping: false,
},
{
id: "2",
name: "Équipe Juridique",
type: "group",
avatar: "EJ",
lastMessage: "IA DocV: Analyse terminée pour Contrat_Client_ABC.pdf",
lastMessageTime: "13:45",
unreadCount: 1,
isOnline: false,
isTyping: false,
members: 5,
},
{
id: "3",
name: "Sophie Laurent",
type: "direct",
avatar: "SL",
lastMessage: "Pouvez-vous m'envoyer le rapport ?",
lastMessageTime: "12:20",
unreadCount: 1,
isOnline: false,
isTyping: false,
},
{
id: "4",
name: "Direction",
type: "group",
avatar: "DIR",
lastMessage: "Réunion reportée à demain 10h",
lastMessageTime: "11:15",
unreadCount: 0,
isOnline: false,
isTyping: false,
members: 3,
},
{
id: "5",
name: "Thomas Rousseau",
type: "direct",
avatar: "TR",
lastMessage: "Merci pour l'info !",
lastMessageTime: "Hier",
unreadCount: 0,
isOnline: true,
isTyping: true,
},
]
const messages = [
{
id: "1",
senderId: "marie",
senderName: "Marie Dubois",
content: "Bonjour ! J'ai besoin de votre avis sur le nouveau contrat client.",
timestamp: "14:20",
type: "text",
status: "read",
},
{
id: "2",
senderId: "me",
senderName: "Moi",
content: "Bien sûr, pouvez-vous me l'envoyer ?",
timestamp: "14:22",
type: "text",
status: "read",
},
{
id: "3",
senderId: "marie",
senderName: "Marie Dubois",
content: "",
timestamp: "14:25",
type: "file",
fileName: "Contrat_Client_ABC.pdf",
fileSize: "2.3 MB",
status: "read",
},
{
id: "4",
senderId: "me",
senderName: "Moi",
content: "J'ai relu le contrat, tout me semble correct. Les clauses de confidentialité sont bien définies.",
timestamp: "14:30",
type: "text",
status: "read",
},
{
id: "5",
senderId: "marie",
senderName: "Marie Dubois",
content: "Parfait, merci pour la validation !",
timestamp: "14:32",
type: "text",
status: "delivered",
},
{
id: "6",
senderId: "ai",
senderName: "IA DocV",
content: `📄 **Analyse IA du document "Contrat_Client_ABC.pdf"**
**Type de document :** PDF (2.3 MB)
**Statut :** ✅ Validé
**Dernière modification :** Il y a 2 heures
**📊 Analyse du contenu :**
• Document juridique détecté avec haute précision
• 3 tag(s) identifié(s) : contrat, client, juridique
• Résumé automatique disponible
• 47 pages analysées
• 12 clauses contractuelles détectées
**🎯 Métriques de qualité :**
• Lisibilité : 92%
• Conformité juridique : 100%
• Sécurité documentaire : Maximale
• Complétude des informations : 95%
**🔍 Points clés identifiés :**
• Durée du contrat : 12 mois
• Montant total : 150 000€ HT
• Clauses de confidentialité : ✅ Présentes et conformes
• Propriété intellectuelle : ✅ Bien définie
• Conditions de résiliation : ✅ Équilibrées
**🛡️ Analyse de conformité RGPD :**
• Données personnelles : ⚠️ Détectées (coordonnées client)
• Durée de conservation : Conforme (7 ans)
• Droit à l'oubli : Applicable après expiration
• Consentement : ✅ Explicite
**⚡ Recommandations :**
• ✅ Document prêt pour signature
• 📋 Archivage permanent recommandé
• 🔄 Révision suggérée dans 11 mois
• 📧 Notification client automatique activée
**📈 Score global : 94/100**
*Analyse générée automatiquement par l'IA DocV - Fiabilité : 98%*`,
timestamp: "14:35",
type: "ai_analysis",
status: "delivered",
analysisType: "document",
documentName: "Contrat_Client_ABC.pdf",
confidence: 98,
processingTime: "2.3s",
},
{
id: "7",
senderId: "ai",
senderName: "IA DocV",
content: `🔍 **Analyse comparative - Dossier Contrats**
**📊 Analyse de 8 documents similaires :**
• Contrats clients : 5 documents
• Avenants : 2 documents
• Conditions générales : 1 document
**📈 Tendances identifiées :**
• Montant moyen des contrats : +15% vs trimestre précédent
• Durée moyenne : 14 mois (stable)
• Taux de renouvellement : 87% (↗️ +5%)
**⚠️ Points d'attention :**
• 2 contrats expirent dans les 30 jours
• 1 clause de révision tarifaire à activer
• Mise à jour RGPD requise sur 3 documents
**🎯 Actions recommandées :**
1. Planifier renouvellement contrats Q1 2024
2. Standardiser les clauses de confidentialité
3. Créer un modèle basé sur ce contrat (performance optimale)
*Analyse prédictive activée - Prochaine révision : 15 février 2024*`,
timestamp: "14:37",
type: "ai_analysis",
status: "delivered",
analysisType: "comparative",
confidence: 95,
processingTime: "4.1s",
},
]
const filteredConversations = conversations.filter((conv) =>
conv.name.toLowerCase().includes(searchTerm.toLowerCase()),
)
const currentConversation = conversations.find((conv) => conv.id === selectedConversation)
const handleSendMessage = () => {
if (newMessage.trim()) {
// Ici on ajouterait la logique pour envoyer le message
console.log("Sending message:", newMessage)
setNewMessage("")
}
}
const getStatusIcon = (status: string) => {
switch (status) {
case "sent":
return
{conversation.isTyping ? ( En train d'écrire... ) : ( {conversation.lastMessage} )}
{conversation.unreadCount > 0 && ({conversation.members} membres
)}{currentConversation.type === "group" ? `${currentConversation.members} membres` : currentConversation.isOnline ? "En ligne" : "Hors ligne"}
{message.content}
) : message.type === "file" ? ({message.fileName}
{message.fileSize}
Choisissez une conversation pour commencer à discuter