import { useEffect } from 'react' import { Box, Typography, Paper, Card, CardContent, List, ListItem, ListItemText, ListItemIcon, Alert, Chip, Button, CircularProgress, LinearProgress, } from '@mui/material' import { Lightbulb, Warning, CheckCircle, TrendingUp, Schedule, Psychology, Assessment, Error, } from '@mui/icons-material' import type { SvgIconProps, ChipProps, LinearProgressProps } from '@mui/material' import { useAppDispatch, useAppSelector } from '../store' import { getConseil, analyzeDocument } from '../store/documentSlice' import { Layout } from '../components/Layout' export default function ConseilView() { const dispatch = useAppDispatch() const { currentDocument, conseilResult, analysisResult, loading } = useAppSelector( (state) => state.document ) useEffect(() => { if (currentDocument) { if (!conseilResult) { dispatch(getConseil(currentDocument.id)) } if (!analysisResult) { dispatch(analyzeDocument(currentDocument.id)) } } }, [currentDocument, conseilResult, analysisResult, dispatch]) if (!currentDocument) { return ( Veuillez d'abord téléverser et sélectionner un document. ) } if (loading) { return ( Génération des conseils LLM... ) } if (!conseilResult) { return ( Aucun conseil disponible. ) } const getRiskColor = (risk: string): SvgIconProps['color'] => { if (risk.toLowerCase().includes('élevé') || risk.toLowerCase().includes('critique')) { return 'error' } if (risk.toLowerCase().includes('moyen') || risk.toLowerCase().includes('modéré')) { return 'warning' } return 'info' } const getScoreColor = (score: number): ChipProps['color'] => { if (score >= 0.8) return 'success' if (score >= 0.6) return 'warning' return 'error' } const getScoreIcon = (score: number) => { if (score >= 0.8) return if (score >= 0.6) return return } return ( Conseil LLM {/* Score de vraisemblance */} {analysisResult && ( Score de vraisemblance {getScoreIcon(analysisResult.credibilityScore)} {(analysisResult.credibilityScore * 100).toFixed(1)}% {analysisResult.credibilityScore >= 0.8 ? 'Document très fiable' : analysisResult.credibilityScore >= 0.6 ? 'Document moyennement fiable' : 'Document peu fiable - vérification recommandée'} {analysisResult.summary && ( {analysisResult.summary} )} )} {/* Analyse LLM */} Analyse LLM {conseilResult.analysis} Généré le {new Date(conseilResult.generatedAt).toLocaleString()} {/* Recommandations */} Recommandations ({conseilResult.recommendations.length + (analysisResult?.recommendations?.length || 0)}) {conseilResult.recommendations.map((recommendation, index) => ( ))} {/* Ajouter les recommandations d'analyse si disponibles */} {analysisResult?.recommendations?.map((recommendation, index) => ( ))} {/* Risques identifiés */} Risques identifiés ({conseilResult.risks.length}) {conseilResult.risks.map((risk, index) => ( ))} {/* Prochaines étapes */} Prochaines étapes recommandées {conseilResult.nextSteps.map((step, index) => ( ))} {/* Actions */} Actions {/* Résumé exécutif */} Résumé exécutif {analysisResult && ( } label={`Score: ${(analysisResult.credibilityScore * 100).toFixed(1)}%`} color={getScoreColor(analysisResult.credibilityScore)} variant="filled" /> )} Cette analyse LLM a été générée automatiquement et doit être validée par un expert notarial. ) }