"use client"; import { useEffect, useState } from "react"; import { useEvaluation } from "@/hooks/use-evaluation"; import { ProfileForm } from "@/components/profile-form"; import { SkillsRadarChart } from "@/components/radar-chart"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { generateRadarData } from "@/lib/evaluation-utils"; import { useUser } from "@/hooks/use-user-context"; import { TechIcon } from "@/components/icons/tech-icon"; import Link from "next/link"; import { Code2, ChevronDown, ChevronRight, ExternalLink } from "lucide-react"; import { getCategoryIcon } from "@/lib/category-icons"; // Fonction pour déterminer la couleur du badge selon le niveau moyen function getScoreColors(score: number) { if (score >= 2.5) { // Expert/Maîtrise (violet) return { bg: "bg-violet-500/20", border: "border-violet-500/30", text: "text-violet-400", gradient: "from-violet-500 to-violet-400", }; } else if (score >= 1.5) { // Autonome (vert) return { bg: "bg-green-500/20", border: "border-green-500/30", text: "text-green-400", gradient: "from-green-500 to-green-400", }; } else if (score >= 0.5) { // Non autonome (orange/amber) return { bg: "bg-amber-500/20", border: "border-amber-500/30", text: "text-amber-400", gradient: "from-amber-500 to-amber-400", }; } else { // Jamais pratiqué (rouge) return { bg: "bg-red-500/20", border: "border-red-500/30", text: "text-red-400", gradient: "from-red-500 to-red-400", }; } } export default function HomePage() { const { userEvaluation, skillCategories, teams, loading, updateProfile } = useEvaluation(); const { setUserInfo } = useUser(); const [expandedCategory, setExpandedCategory] = useState(null); // Update user info in navigation when user evaluation is loaded useEffect(() => { if (userEvaluation) { const teamName = teams.find((t) => t.id === userEvaluation.profile.teamId)?.name || ""; setUserInfo({ firstName: userEvaluation.profile.firstName, lastName: userEvaluation.profile.lastName, teamName, }); } else { setUserInfo(null); } }, [userEvaluation, teams, setUserInfo]); if (loading) { return (

Chargement...

); } if (!userEvaluation) { return (

Bienvenue sur PeakSkills

Évaluez vos compétences techniques et suivez votre progression

); } const radarData = generateRadarData( userEvaluation.evaluations, skillCategories ); return (
{/* Background Effects */}
{/* Header */}
Tableau de bord

Bonjour {userEvaluation.profile.firstName} !

Voici un aperçu de vos compétences techniques

{/* Main Content Grid */}
{/* Radar Chart */}

Vue d'ensemble de vos compétences

Radar chart représentant votre niveau par catégorie

{/* Category Breakdown */}

Détail par catégorie

Vue détaillée de votre progression dans chaque domaine

{radarData.map((category) => { const categoryEval = userEvaluation.evaluations.find( (e) => e.category === category.category ); const skillsCount = categoryEval?.selectedSkillIds?.length || 0; const evaluatedCount = categoryEval?.skills.filter((s) => s.level !== null).length || 0; const isExpanded = expandedCategory === category.category; const currentSkillCategory = skillCategories.find( (sc) => sc.category === category.category ); const CategoryIcon = currentSkillCategory ? getCategoryIcon(currentSkillCategory.icon) : null; return (
setExpandedCategory( isExpanded ? null : category.category ) } >
{isExpanded ? ( ) : ( )} {CategoryIcon && ( )}

{category.category}

{skillsCount > 0 ? ( (() => { const colors = getScoreColors(category.score); return (
{Math.round((category.score / 3) * 100)}%
); })() ) : (
Aucune
)}
{skillsCount > 0 ? `${evaluatedCount}/${skillsCount} compétences sélectionnées évaluées` : "Aucune compétence sélectionnée"}
{skillsCount > 0 ? (
{(() => { const colors = getScoreColors(category.score); return (
); })()}
) : (
)}
{/* Expanded Skills */} {isExpanded && categoryEval && currentSkillCategory && (
{categoryEval.selectedSkillIds.map((skillId) => { const skill = currentSkillCategory.skills.find( (s) => s.id === skillId ); if (!skill) return null; const skillEval = categoryEval.skills.find( (s) => s.skillId === skillId ); return (
{skill.name}
{skillEval?.level && ( {skillEval.level === "never" && "Jamais utilisé"} {skillEval.level === "not-autonomous" && "Non autonome"} {skillEval.level === "autonomous" && "Autonome"} {skillEval.level === "expert" && "Expert"} )}
); })}
)}
); })}
{/* Action Button */}
); }