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.
)
}