'use client'; import { useQuery } from '@tanstack/react-query'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { useFeatureFlag } from '@/hooks/use-feature-flag'; import { apiFetch } from '@/lib/api/client'; import type { InterestScore } from '@/lib/services/interest-scoring.service'; // ─── Score tier helpers ─────────────────────────────────────────────────────── function getScoreTier(score: number): { label: string; className: string } { if (score >= 80) return { label: 'Hot', className: 'bg-green-100 text-green-800 border-green-200' }; if (score >= 60) return { label: 'Warm', className: 'bg-yellow-100 text-yellow-800 border-yellow-200' }; if (score >= 40) return { label: 'Cool', className: 'bg-orange-100 text-orange-800 border-orange-200' }; return { label: 'Cold', className: 'bg-gray-100 text-gray-700 border-gray-200' }; } // ─── Component ──────────────────────────────────────────────────────────────── interface InterestScoreBadgeProps { interestId: string; } export function InterestScoreBadge({ interestId }: InterestScoreBadgeProps) { const featureEnabled = useFeatureFlag('ai_interest_scoring'); const { data, isLoading } = useQuery<{ data: InterestScore }>({ queryKey: ['interest-score', interestId], queryFn: () => apiFetch(`/api/v1/ai/interest-score?interestId=${interestId}`), enabled: featureEnabled, staleTime: 60 * 60 * 1000, // 1 hour - mirrors server-side cache TTL }); if (!featureEnabled) return null; if (isLoading || !data) return null; const score = data.data; const { label, className } = getScoreTier(score.totalScore); const { breakdown } = score; return ( {label} {score.totalScore}

Interest Score Breakdown

Total: {score.totalScore}/100

); } function ScoreRow({ label, value, max }: { label: string; value: number; max: number }) { return (
{label} {value}/{max}
); }