import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { CheckCircle2, ArrowRight, Search, Database, Zap, AlertTriangle, Lightbulb, TicketCheck } from 'lucide-react'; import useTicketStore from '../store/ticketStore'; /* ─── Animated progress steps at the top ─────────────────────────────────── */ const steps = [ { icon: Search, label: 'Your Issue', desc: 'Captured & analysed' }, { icon: Database, label: 'Case History', desc: 'Scanning 10 000+ cases' }, { icon: Zap, label: 'Match Found', desc: 'Similarity calculated' }, ]; function KnowledgeCheck() { const { aiTicket } = useTicketStore(); const navigate = useNavigate(); const [activeStep, setActiveStep] = useState(0); /* Animate the step indicators on mount */ useEffect(() => { const timers = [ setTimeout(() => setActiveStep(1), 600), setTimeout(() => setActiveStep(2), 1300), ]; return () => timers.forEach(clearTimeout); }, []); useEffect(() => { if (!aiTicket) { navigate('/create-ticket'); return; } // Update status for timeline sync if (aiTicket.status !== 'duplicate_check') { useTicketStore.getState().setAITicket({ ...aiTicket, status: 'duplicate_check' }); } if (!aiTicket.duplicate_ticket && !aiTicket.auto_resolve) navigate('/ticket-tracking'); }, [aiTicket, navigate]); if (!aiTicket) return null; /* ── Derive resolution steps from AI data ── */ let resolutionSteps = null; const rawSteps = aiTicket.resolution_steps || aiTicket.suggested_solution || aiTicket.solution_steps || aiTicket.steps || null; if (Array.isArray(rawSteps) && rawSteps.length > 0) { resolutionSteps = rawSteps; } else if (typeof rawSteps === 'string' && rawSteps.trim()) { resolutionSteps = rawSteps.split(/\n+/).map(s => s.replace(/^\d+[.)]\s*/, '').trim()).filter(Boolean); } const similarityPct = aiTicket.similarity_score ? Math.round(aiTicket.similarity_score * 100) : aiTicket.confidence ? Math.round(aiTicket.confidence * 100) : null; return (
{/* ── Premium Dark Hero Header ── */}
{/* Glow blobs */}
{/* Dot-grid overlay */}
{/* Scanning beam */}
{/* Live badge */}
Analyzing History

Scanning our case history

We searched previous issues to see if this problem was already solved.

{/* Glowing animated steps */}
{steps.map((step, i) => { const Icon = step.icon; const done = i <= activeStep; const active = i === activeStep; return (
{active && ( <> )}

{step.label}

{i < steps.length - 1 && (
)} ); })}
{/* ── Match card ── */}
{/* Header */}

Similar Issue Found

We found a previously resolved ticket that is {similarityPct ? {similarityPct}% similar : ' highly similar'} to your issue.

{/* Matched ticket info */}
Matched Ticket
Resolved

#{aiTicket.duplicate_ticket || '—'} — {aiTicket.summary}

{similarityPct && (
Similarity {similarityPct}%
)}
{/* Suggested Solution — only rendered if AI provides steps */} {resolutionSteps && resolutionSteps.length > 0 && (

Suggested Solution

    {resolutionSteps.map((step, i) => (
  1. {i + 1} {step}
  2. ))}
)} {/* Actions */}
); } export default KnowledgeCheck;