"use client" import { useState } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Search, Loader2, FileText, Zap } from "lucide-react" import { ProtectedRoute } from "@/components/protected-route" interface SearchResult { filename: string mimetype: string page: number text: string score: number } function SearchPage() { const [query, setQuery] = useState("") const [loading, setLoading] = useState(false) const [results, setResults] = useState([]) const [searchPerformed, setSearchPerformed] = useState(false) const handleSearch = async (e: React.FormEvent) => { e.preventDefault() if (!query.trim()) return setLoading(true) setSearchPerformed(false) try { const response = await fetch("/api/search", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ query }), }) const result = await response.json() if (response.ok) { setResults(result.results || []) setSearchPerformed(true) } else { console.error("Search failed:", result.error) setResults([]) setSearchPerformed(true) } } catch (error) { console.error("Search error:", error) setResults([]) setSearchPerformed(true) } finally { setLoading(false) } } return (
{/* Hero Section */}

Search

Find documents using semantic search

Enter your search query to find relevant documents using AI-powered semantic search across your document collection.

{/* Search Interface */} Search Documents Enter your search query to find relevant documents using semantic search
setQuery(e.target.value)} className="h-12 bg-background/50 border-border/50 focus:border-blue-400/50 focus:ring-blue-400/20" />
{/* Results Section */}
{searchPerformed ? (

Search Results

{results.length} result{results.length !== 1 ? 's' : ''} found
{results.length === 0 ? (

No documents found

Try adjusting your search terms or check if documents have been indexed.

) : (
{results.map((result, index) => (
{result.filename}
{result.score.toFixed(2)}
{result.mimetype} Page {result.page}

{result.text}

))}
)}
) : (

Enter a search query above to get started

)}
) } export default function ProtectedSearchPage() { return ( ) }