"use client"; import React from "react"; import { useRouter } from "next/navigation"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Users, ExternalLink, Download, Eye } from "lucide-react"; import { TeamMember } from "@/lib/admin-types"; interface TeamDetailModalProps { isOpen: boolean; onClose: () => void; team: { teamId: string; teamName: string; direction: string; totalMembers: number; averageSkillLevel: number; topSkills: Array<{ skillName: string; averageLevel: number; icon?: string; importance: "incontournable" | "majeure" | "standard"; coverage: number; }>; skillCoverage: number; criticalSkillsCoverage: { incontournable: number; majeure: number; }; members: TeamMember[]; } | null; } function getSkillLevelLabel(level: number): string { if (level < 0.5) return "Débutant"; if (level < 1.5) return "Intermé."; if (level < 2.5) return "Avancé"; return "Expert"; } function getSkillLevelColor(level: number): string { if (level < 0.5) return "bg-red-500"; if (level < 1.5) return "bg-orange-500"; if (level < 2.5) return "bg-blue-500"; return "bg-green-500"; } export function TeamDetailModal({ isOpen, onClose, team, }: TeamDetailModalProps) { const router = useRouter(); if (!team) return null; const handleViewFullDetails = () => { router.push(`/admin/team/${team.teamId}`); onClose(); }; const handleExportReport = () => { // Rapport simple depuis la modale const reportData = { team: team.teamName, direction: team.direction, exportDate: new Date().toLocaleDateString(), summary: { totalMembers: team.totalMembers, averageSkillLevel: team.averageSkillLevel, skillCoverage: team.skillCoverage, }, topSkills: team.topSkills, }; const dataStr = JSON.stringify(reportData, null, 2); const dataUri = "data:application/json;charset=utf-8," + encodeURIComponent(dataStr); const exportFileDefaultName = `apercu-${team.teamName.toLowerCase()}-${ new Date().toISOString().split("T")[0] }.json`; const linkElement = document.createElement("a"); linkElement.setAttribute("href", dataUri); linkElement.setAttribute("download", exportFileDefaultName); linkElement.click(); }; return (

Équipe {team.teamName}

{team.direction} • {team.totalMembers} membres

Aperçu rapide de l'équipe. Cliquez sur "Voir tous les détails" pour une vue complète.
{/* Stats générales */}

Équipe

{team.totalMembers}
Membres
{((team.averageSkillLevel / 3) * 100).toFixed(0)}%
Niveau moyen

Couverture

Incontournables {team.criticalSkillsCoverage.incontournable.toFixed(0)}%
Majeures {team.criticalSkillsCoverage.majeure.toFixed(0)}%
{/* Top compétences résumé */}

Top 3 Compétences

{team.topSkills.slice(0, 3).map((skill, idx) => { const target = skill.importance === "incontournable" ? 75 : skill.importance === "majeure" ? 60 : 0; const isUnderTarget = target > 0 && skill.coverage < target; return (
{skill.skillName} {skill.importance === "incontournable" ? "Incontournable" : skill.importance === "majeure" ? "Majeure" : "Standard"}
{skill.coverage.toFixed(0)}% {target > 0 && ( (obj. {target}%) )}
); })}
{/* Actions */}
); }