"use client" import React, { 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 { Checkbox } from "@/components/ui/checkbox" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Merge, ArrowRight, CheckCircle, AlertTriangle, Lightbulb, Cpu, Monitor, MemoryStick, HardDrive, Zap, Fan, Clapperboard as Motherboard } from "lucide-react" import { Component, ComponentCategory, mockComponents } from "@/lib/mock-data" import { BuildComparison } from "@/lib/duplicate-detector" import { formatCurrency } from "@/lib/currency" interface BuildMergeSuggestionsProps { comparisons: BuildComparison[] currentComponents: Record onMerge: (mergedComponents: Record) => void onDismiss: () => void } const categoryIcons = { cpu: Cpu, motherboard: Motherboard, memory: MemoryStick, storage: HardDrive, gpu: Monitor, psu: Zap, case: HardDrive, cooling: Fan, } export function BuildMergeSuggestions({ comparisons, currentComponents, onMerge, onDismiss }: BuildMergeSuggestionsProps) { const [selectedComponents, setSelectedComponents] = useState>({}) const [showMergeDialog, setShowMergeDialog] = useState(false) const handleComponentToggle = (category: ComponentCategory, component: Component | null) => { setSelectedComponents(prev => ({ ...prev, [category]: prev[category] === component ? null : component })) } const handleMerge = () => { // Merge current components with selected components const mergedComponents = { ...currentComponents } Object.entries(selectedComponents).forEach(([category, component]) => { if (component) { mergedComponents[category as ComponentCategory] = component } }) onMerge(mergedComponents) setShowMergeDialog(false) } const getMergeSuggestions = () => { const suggestions: Array<{ buildId: string buildName: string similarityScore: number suggestedComponents: Array<{ category: ComponentCategory component: Component reason: string }> }> = [] comparisons.forEach(comparison => { if (comparison.similarityScore >= 0.6) { // Mock suggested components - in real app, this would come from the comparison const suggestedComponents = [ { category: 'cpu' as ComponentCategory, component: mockComponents.find(c => c.category === 'cpu' && c.id !== currentComponents.cpu?.id) || mockComponents[0], reason: 'Better performance for similar price' }, { category: 'gpu' as ComponentCategory, component: mockComponents.find(c => c.category === 'gpu' && c.id !== currentComponents.gpu?.id) || mockComponents[1], reason: 'More recent model with better features' } ].filter(s => s.component) suggestions.push({ buildId: comparison.existingBuildId || '', buildName: comparison.existingBuildName || 'Similar Build', similarityScore: comparison.similarityScore, suggestedComponents }) } }) return suggestions } const suggestions = getMergeSuggestions() if (suggestions.length === 0) return null return (
Build Improvement Suggestions We found similar builds that might have better components for your build. {suggestions.map((suggestion, index) => (
{suggestion.buildName}
{Math.round(suggestion.similarityScore * 100)}% similar {suggestion.suggestedComponents.length} suggestions
{suggestion.suggestedComponents.map((suggestion, compIndex) => { const Icon = categoryIcons[suggestion.category] return (

{suggestion.component.name}

{suggestion.reason}

{formatCurrency(suggestion.component.price)}

) })}
))} {/* Merge Dialog */} Merge Build Components Select components from similar builds to improve your current build.
{Object.entries(selectedComponents).map(([category, component]) => { if (!component) return null const Icon = categoryIcons[category as ComponentCategory] return (
handleComponentToggle(category as ComponentCategory, checked ? component : null) } />

{component.name}

{categoryNames[category as ComponentCategory]}

{formatCurrency(component.price)}

) })}
) } const categoryNames = { cpu: "Processor", motherboard: "Motherboard", memory: "Memory (RAM)", storage: "Storage", gpu: "Graphics Card", psu: "Power Supply", case: "Case", cooling: "Cooling", }