import React, { useState } from 'react';
import { Search, RefreshCw, Filter } from 'lucide-react';
import { useToolsInventory } from './useToolsInventory';
import { ToolsGrid } from './ToolsGrid';
import { ToolsEmptyState } from './ToolsEmptyState';
import { ToolDetailDrawer } from './ToolDetailDrawer';
const TYPE_BUTTONS = [
{ value: 'all', label: 'All' },
{ value: 'tool', label: 'Tools' },
{ value: 'a2a', label: 'A2A Agents' },
];
export function ToolsTab({ backendUrl, apiKey, onGoToMcpServers }) {
const { items, counts, loading, error, refresh, search, setSearch, statusFilter, setStatusFilter, typeFilter, setTypeFilter, forgeHealthy, } = useToolsInventory({ backendUrl, apiKey });
const [selectedItem, setSelectedItem] = useState(null);
const [refreshing, setRefreshing] = useState(false);
const handleRefresh = async () => {
setRefreshing(true);
try {
await refresh();
}
finally {
setRefreshing(false);
}
};
const hasItems = !loading && !error && items.length > 0;
const showEmpty = !loading && !error && items.length === 0 && !search && statusFilter === 'all' && typeFilter === 'all';
return (
{/* Stats bar */}
{/* Total capabilities */}
Total
{counts.total}
{/* Tools count */}
Tools
{counts.tools.total}
{/* A2A count */}
A2A
{counts.a2a.total}
{/* Active / Inactive */}
Active
{counts.active}
Inactive
{counts.inactive}
{/* Forge status */}
{forgeHealthy !== null && (<>
Forge {forgeHealthy ? 'Online' : 'Offline'}
>)}
{/* Search + filter bar */}
{(counts.total > 0 || search || statusFilter !== 'all' || typeFilter !== 'all') && (
setSearch(e.target.value)} placeholder="Search by name, description, or ID..." className="w-full bg-white/5 border border-white/10 rounded-xl pl-10 pr-4 py-2.5 text-sm text-white placeholder-white/30 focus:outline-none focus:border-purple-500/50 transition-colors"/>
{/* Type filter */}
{TYPE_BUTTONS.map((t) => ())}
{/* Status filter */}
{['all', 'active', 'inactive'].map((s) => ())}
)}
{/* Content */}
{loading &&
}
{error &&
}
{showEmpty && }
{!loading && !error && items.length === 0 && (search || statusFilter !== 'all' || typeFilter !== 'all') && !showEmpty && (
No capabilities match your search or filters.
)}
{hasItems && ()}
{/* Detail drawer */}
{selectedItem && ( setSelectedItem(null)}/>)}
);
}