import { useMemo, useState } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Separator } from '@/components/ui/separator' import { useConflictResolution } from '@/hooks/use-conflict-resolution' import { ConflictIndicator } from '@/components/ConflictIndicator' import { db } from '@/lib/db' import conflictCopy from '@/data/conflict-resolution-copy.json' import { Flask, Database, Warning, CheckCircle, ArrowsClockwise, } from '@phosphor-icons/react' import { toast } from 'sonner' const demoCopy = conflictCopy.demo function DemoHeader() { return (

{demoCopy.title}

{demoCopy.subtitle}

) } function StatusCard({ hasConflicts, stats }: { hasConflicts: boolean; stats: { totalConflicts: number; conflictsByType: Record } }) { return ( {demoCopy.statusTitle}
{demoCopy.conflictsLabel} {hasConflicts ? ( {stats.totalConflicts} ) : ( {demoCopy.noneLabel} )}
{demoCopy.filesLabel} {stats.conflictsByType.files || 0}
{demoCopy.modelsLabel} {stats.conflictsByType.models || 0}
) } function DemoActionsCard({ hasConflicts, simulatingConflict, onSimulate, onDetect, onResolveAll, conflictSummary, }: { hasConflicts: boolean simulatingConflict: boolean onSimulate: () => void onDetect: () => void onResolveAll: () => void conflictSummary: string }) { return ( {demoCopy.demoActionsTitle} {demoCopy.demoActionsDescription}
{hasConflicts && ( <> )}
{hasConflicts && (

{conflictSummary}

{demoCopy.navigateMessage}

)}
) } function ResolutionStrategiesCard() { return ( {demoCopy.resolutionStrategiesTitle} {demoCopy.resolutionStrategiesDescription}
{demoCopy.strategyKeepLocalTitle}

{demoCopy.strategyKeepLocalDescription}

{demoCopy.strategyKeepRemoteTitle}

{demoCopy.strategyKeepRemoteDescription}

{demoCopy.strategyMergeBothTitle}

{demoCopy.strategyMergeBothDescription}

{demoCopy.strategyManualEditTitle}

{demoCopy.strategyManualEditDescription}

) } function ConflictIndicatorCard() { return ( {demoCopy.indicatorTitle} {demoCopy.indicatorDescription}
{demoCopy.badgeVariantLabel}
{demoCopy.compactVariantLabel}
) } export function ConflictResolutionDemo() { const { hasConflicts, stats, detect, resolveAll } = useConflictResolution() const [simulatingConflict, setSimulatingConflict] = useState(false) const conflictSummary = useMemo(() => { const count = stats.totalConflicts const label = count === 1 ? demoCopy.conflictSingular : demoCopy.conflictPlural return `${count} ${label} ${demoCopy.detectedSuffix}` }, [stats.totalConflicts]) const simulateConflict = async () => { setSimulatingConflict(true) try { const testFile = { id: 'demo-conflict-file', name: 'example.ts', path: '/src/example.ts', content: 'const local = "This is the local version"', language: 'typescript', updatedAt: Date.now(), } await db.put('files', testFile) toast.info(demoCopy.toastLocalCreated) await new Promise(resolve => setTimeout(resolve, 1000)) toast.success(demoCopy.toastSimulationComplete) } catch (err: any) { toast.error(err.message || demoCopy.toastSimulationError) } finally { setSimulatingConflict(false) } } const handleQuickResolveAll = async () => { try { await resolveAll('local') toast.success(demoCopy.toastResolveAllSuccess) } catch (err: any) { toast.error(err.message || demoCopy.toastResolveAllError) } } return (
) }