import React, { useState, useRef } from 'react'; import { Search, X } from 'lucide-react'; import { searchTopics } from '@/lib/services/search'; interface SearchAnswer { title: string; url: string; excerpt: string; } interface SearchInputProps { initialQuery?: string; showDropdown?: boolean; } export default function SearchInput({ initialQuery = '', showDropdown = true }: SearchInputProps) { const [query, setQuery] = useState(initialQuery); const [answers, setAnswers] = useState([]); const debounceRef = useRef | null>(null); const handleInputChange = (e: React.ChangeEvent) => { const value = e.target.value; setQuery(value); if (debounceRef.current) { clearTimeout(debounceRef.current); } if (!showDropdown || value.trim().length < 2) { setAnswers([]); return; } debounceRef.current = setTimeout(async () => { try { const response = await searchTopics(value.trim(), { useWebSearch: false }); setAnswers(response.results.slice(0, 5)); } catch { setAnswers([]); } }, 300); }; const handleClear = () => { setQuery(''); setAnswers([]); if (!showDropdown) { window.location.href = '/search'; } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (query.trim()) { window.location.href = `/search?q=${encodeURIComponent(query.trim())}`; } }; return (
{query && ( )}
{showDropdown && answers.length > 0 && (
{answers.map((answer, i) => (

{answer.title.replace(/_/g, ' ')}

$1'), }} /> ))}

)}
); }