import { useState, useEffect } from 'react' import { motion } from 'framer-motion' import { Bot, Users, TrendingUp, Megaphone, Share2, Wallet, Calculator, Briefcase, FileText, ShieldCheck, HeadphonesIcon, FolderKanban, Zap, Sparkles, Activity, CheckCircle2, AlertCircle, XCircle } from 'lucide-react' import { getAllAgents, AgentContext } from '@/components/agent/AgentContext' import { AgentChat } from '@/components/agent/AgentChat' import { cn } from '@/lib/utils' const agentIcons: Record = { crm: Users, sales: TrendingUp, marketing: Megaphone, social: Share2, finance: Wallet, accounting: Calculator, hr: Briefcase, legal: FileText, compliance: ShieldCheck, support: HeadphonesIcon, projects: FolderKanban, automation: Zap, dashboard: Sparkles }; const statusConfig = { operational: { icon: CheckCircle2, color: 'text-green-500', bg: 'bg-green-500/10', label: 'Operational' }, degraded: { icon: AlertCircle, color: 'text-yellow-500', bg: 'bg-yellow-500/10', label: 'Degraded' }, error: { icon: XCircle, color: 'text-red-500', bg: 'bg-red-500/10', label: 'Error' }, disabled: { icon: XCircle, color: 'text-gray-400', bg: 'bg-gray-400/10', label: 'Disabled' } }; export function AgentLayerPage() { const [selectedAgent, setSelectedAgent] = useState(null); const [agents, setAgents] = useState([]); const [chatOpen, setChatOpen] = useState(false); useEffect(() => { setAgents(getAllAgents()); }, []); const handleAgentClick = (rum: string) => { setSelectedAgent(rum); setChatOpen(true); }; return (
{/* Header */}

BOC Agent Layer

Professionellt agentlager för hela organisationen

{agents.filter(a => a.status === 'operational').length} / {agents.length} Operational
{/* Agent Grid */}
{agents.map((agent, index) => { const Icon = agentIcons[agent.rum] || Bot; const status = statusConfig[agent.status]; const StatusIcon = status.icon; return ( handleAgentClick(agent.rum)} className={cn( 'group relative p-5 rounded-2xl border border-border bg-surface', 'hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5', 'cursor-pointer transition-all duration-200' )} > {/* Status Indicator */}
{status.label}
{/* Icon */}
{/* Info */}

{agent.titel}

{agent.kompetenser.slice(0, 3).join(', ')}

{/* Capabilities */}
{agent.capabilities.map(cap => ( {cap} ))}
{/* Hover Action */}
Öppna agent
); })}
{/* Agent Chat */} {selectedAgent && ( setChatOpen(!chatOpen)} /> )}
); }