import React, { useState, useEffect } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@core/components/ui/card' import { Badge } from '@core/components/ui/badge' import { Button } from '@core/components/ui/button' import { LoadingSpinner } from '@core/components/ui/LoadingSpinner' import { useApi } from '@core/hooks/useApi' import { apiFetch } from '@core/lib/api' import { Brain, TrendingUp, Users, Target, Clock, AlertCircle } from 'lucide-react' interface FunnelSignal { id: string title: string data: { signal_type: string score_delta: number account_id?: string person_id?: string occurred_at: string } created_at: string } interface Account { id: string display_name: string data: { lead_score?: number lifecycle_stage?: string } } interface Task { id: string title: string data: { task_type: string priority: string account_id?: string person_id?: string description: string due_date?: string } status: string } interface ActivityLog { id: string title: string data: { action: string account_id?: string signal_type?: string score_delta?: number new_score?: number new_stage?: string } created_at: string } export default function IntelligencePage() { const [selectedAccountId, setSelectedAccountId] = useState('') const [accounts, setAccounts] = useState([]) const [signals, setSignals] = useState([]) const [tasks, setTasks] = useState([]) const [activities, setActivities] = useState([]) const [loading, setLoading] = useState(true) // Fetch accounts with lead scores const { data: accountsData, loading: accountsLoading } = useApi(async () => { const res = await apiFetch('/api/admin-data?action=list&entity=accounts&limit=50') const json = await res.json() return json.data || [] }) // Fetch funnel signals const { data: signalsData, loading: signalsLoading } = useApi(async () => { const res = await apiFetch('/api/admin-data?action=list&entity=items&type_slug=funnel_signal&limit=20') const json = await res.json() return json.data || [] }) // Fetch tasks const { data: tasksData, loading: tasksLoading } = useApi(async () => { const res = await apiFetch('/api/admin-data?action=list&entity=items&type_slug=task&limit=20') const json = await res.json() return json.data || [] }) // Fetch activity logs const { data: activitiesData, loading: activitiesLoading } = useApi(async () => { const res = await apiFetch('/api/admin-data?action=list&entity=items&type_slug=activity_log&limit=20') const json = await res.json() return json.data || [] }) useEffect(() => { if (accountsData) { setAccounts(accountsData.filter((acc: any) => acc.data?.lead_score !== undefined)) } }, [accountsData]) useEffect(() => { if (signalsData) setSignals(signalsData) if (tasksData) setTasks(tasksData) if (activitiesData) setActivities(activitiesData) setLoading(false) }, [signalsData, tasksData, activitiesData]) const selectedAccount = accounts.find(acc => acc.id === selectedAccountId) const getLifecycleStageColor = (stage?: string) => { switch (stage) { case 'product_qualified_lead': return 'bg-green-500' case 'engaged_lead': return 'bg-blue-500' case 'identified_lead': return 'bg-yellow-500' case 'anonymous': return 'bg-gray-500' default: return 'bg-gray-400' } } const getSignalTypeColor = (type: string) => { const colors: Record = { 'docs_view': 'bg-blue-100 text-blue-800', 'pricing_visit': 'bg-purple-100 text-purple-800', 'portal_account_created': 'bg-green-100 text-green-800', 'spine_install_registered': 'bg-orange-100 text-orange-800', 'marketplace_app_installed': 'bg-pink-100 text-pink-800' } return colors[type] || 'bg-gray-100 text-gray-800' } const getPriorityColor = (priority: string) => { switch (priority) { case 'high': return 'bg-red-100 text-red-800' case 'medium': return 'bg-yellow-100 text-yellow-800' case 'low': return 'bg-green-100 text-green-800' default: return 'bg-gray-100 text-gray-800' } } if (loading || accountsLoading || signalsLoading || tasksLoading || activitiesLoading) { return } return (

Cortex Intelligence

Funnel intelligence and lead scoring insights

{/* Account Selector */} Account Intelligence Select an account to view detailed intelligence
{accounts.map((account) => (
setSelectedAccountId(account.id)} >

{account.display_name}

{account.data?.lifecycle_stage || 'unknown'}
{account.data?.lead_score || 0}
Lead Score
))}
{selectedAccount && (
{/* Recent Signals */} Recent Funnel Signals Latest signals for {selectedAccount?.display_name}
{signals .filter(signal => signal.data.account_id === selectedAccountId) .slice(0, 5) .map((signal) => (
{signal.data.signal_type}
{signal.title}
{new Date(signal.data.occurred_at).toLocaleDateString()}
0 ? 'text-green-600' : 'text-red-600' }`}> {signal.data.score_delta > 0 ? '+' : ''}{signal.data.score_delta}
))}
{/* Tasks */} Recommended Actions Tasks for {selectedAccount?.display_name}
{tasks .filter(task => task.data.account_id === selectedAccountId) .slice(0, 5) .map((task) => (
{task.data.priority} {task.data.due_date && (
{new Date(task.data.due_date).toLocaleDateString()}
)}

{task.title}

{task.data.description}

))}
)} {/* Activity Timeline */} Activity Timeline Recent funnel intelligence activities
{activities.slice(0, 10).map((activity) => (
{activity.data.action} {activity.data.signal_type && ( {activity.data.signal_type} )}

{activity.data.new_score !== undefined && ( <>Score updated to {activity.data.new_score} )} {activity.data.new_stage && ( <> ยท Stage: {activity.data.new_stage} )}

{new Date(activity.created_at).toLocaleString()}
))}
) }