import React, { useState, useEffect } from 'react'; import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './ui/card'; import { Button } from './ui/button'; import { Badge } from './ui/badge'; import { Input } from './ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; import { Alert, AlertDescription, AlertTitle } from './ui/alert'; import { Progress } from './ui/progress'; import { Store, Search, Filter, Star, Clock, DollarSign, Users, TrendingUp, Award, Shield, Zap, Target, BarChart3, Calendar, CheckCircle, AlertCircle, XCircle, Plus, Edit, Trash2, Eye, MessageSquare, ThumbsUp, ThumbsDown, Briefcase, Building, MapPin, Globe, Lock, Unlock, Heart, Share2, Bookmark, MoreHorizontal } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; import { useWallet } from '@/hooks/use-wallet'; interface Service { id: string; agentId: string; serviceType: string; name: string; description: string; metadata: Record; basePrice: number; reputation: number; status: string; totalEarnings: number; completedJobs: number; averageRating: number; ratingCount: number; listedAt: string; lastUpdated: string; guildId?: string; tags: string[]; capabilities: string[]; requirements: string[]; pricingModel: string; estimatedDuration: number; availability: Record; } interface MarketplaceAnalytics { totalServices: number; activeServices: number; totalRequests: number; pendingRequests: number; totalVolume: number; totalGuilds: number; averageServicePrice: number; popularCategories: string[]; topAgents: string[]; revenueTrends: Record; growthMetrics: Record; } const AgentServiceMarketplace: React.FC = () => { const { toast } = useToast(); const { isConnected, address } = useWallet(); const [services, setServices] = useState([]); const [analytics, setAnalytics] = useState(null); const [activeTab, setActiveTab] = useState('marketplace'); const [loading, setLoading] = useState(true); // Search and filter states const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('all'); const [priceRange, setPriceRange] = useState({ min: 0, max: 1000 }); const [minRating, setMinRating] = useState(0); // Mock data for demonstration const mockServices: Service[] = [ { id: 'service_001', agentId: 'agent_001', serviceType: 'data_analysis', name: 'Advanced Data Analytics', description: 'Comprehensive data analysis with machine learning insights', metadata: { expertise: ['ml', 'statistics', 'visualization'] }, basePrice: 0.05, reputation: 850, status: 'active', totalEarnings: 2.5, completedJobs: 50, averageRating: 4.7, ratingCount: 45, listedAt: '2024-01-26T10:00:00Z', lastUpdated: '2024-01-26T16:00:00Z', guildId: 'guild_001', tags: ['machine-learning', 'statistics', 'visualization'], capabilities: ['data-processing', 'ml-models', 'insights'], requirements: ['data-access', 'clear-objectives'], pricingModel: 'fixed', estimatedDuration: 2, availability: { monday: true, tuesday: true, wednesday: true, thursday: true, friday: true, saturday: false, sunday: false } }, { id: 'service_002', agentId: 'agent_002', serviceType: 'content_creation', name: 'AI Content Generation', description: 'High-quality content creation for blogs, articles, and marketing', metadata: { expertise: ['writing', 'seo', 'marketing'] }, basePrice: 0.03, reputation: 920, status: 'active', totalEarnings: 1.8, completedJobs: 60, averageRating: 4.9, ratingCount: 58, listedAt: '2024-01-25T08:00:00Z', lastUpdated: '2024-01-26T14:00:00Z', tags: ['writing', 'seo', 'marketing', 'content'], capabilities: ['blog-writing', 'article-writing', 'seo-optimization'], requirements: ['topic-guidelines', 'target-audience'], pricingModel: 'per_task', estimatedDuration: 1, availability: { monday: true, tuesday: true, wednesday: true, thursday: true, friday: true, saturday: true, sunday: true } }, { id: 'service_003', agentId: 'agent_003', serviceType: 'research', name: 'Market Research Analysis', description: 'In-depth market research and competitive analysis', metadata: { expertise: ['research', 'analysis', 'reporting'] }, basePrice: 0.08, reputation: 780, status: 'active', totalEarnings: 3.2, completedJobs: 40, averageRating: 4.5, ratingCount: 38, listedAt: '2024-01-24T12:00:00Z', lastUpdated: '2024-01-26T11:00:00Z', tags: ['research', 'analysis', 'reporting', 'market'], capabilities: ['market-analysis', 'competitive-intelligence', 'reporting'], requirements: ['research-scope', 'industry-focus'], pricingModel: 'hourly', estimatedDuration: 4, availability: { monday: true, tuesday: true, wednesday: true, thursday: true, friday: true, saturday: false, sunday: false } } ]; const mockAnalytics: MarketplaceAnalytics = { totalServices: 150, activeServices: 120, totalRequests: 450, pendingRequests: 25, totalVolume: 25.5, totalGuilds: 8, averageServicePrice: 0.17, popularCategories: ['data_analysis', 'content_creation', 'research', 'development'], topAgents: ['agent_001', 'agent_002', 'agent_003'], revenueTrends: { '2024-01': 5.2, '2024-02': 8.1, '2024-03': 12.2 }, growthMetrics: { 'service_growth': 0.15, 'request_growth': 0.25, 'guild_growth': 0.10 } }; useEffect(() => { // Load mock data setTimeout(() => { setServices(mockServices); setAnalytics(mockAnalytics); setLoading(false); }, 1000); }, []); const getStatusColor = (status: string) => { switch (status) { case 'active': return 'bg-green-500'; case 'pending': return 'bg-yellow-500'; case 'accepted': return 'bg-blue-500'; case 'completed': return 'bg-green-500'; case 'cancelled': return 'bg-red-500'; case 'expired': return 'bg-gray-500'; default: return 'bg-gray-400'; } }; const renderStars = (rating: number) => { return Array.from({ length: 5 }, (_, i) => ( )); }; const filteredServices = services.filter(service => { if (selectedCategory !== 'all' && service.serviceType !== selectedCategory) return false; if (service.basePrice < priceRange.min || service.basePrice > priceRange.max) return false; if (service.averageRating < minRating) return false; if (searchQuery) { const query = searchQuery.toLowerCase(); return ( service.name.toLowerCase().includes(query) || service.description.toLowerCase().includes(query) || service.tags.some(tag => tag.toLowerCase().includes(query)) ); } return true; }); if (loading) { return (

Loading marketplace...

); } return (

AI Agent Service Marketplace

Discover and monetize specialized AI agent services

{analytics?.totalServices} Services {analytics?.totalGuilds} Guilds {analytics?.totalVolume} AITBC Volume
Marketplace Analytics {/* Search and Filters */} Search Services
setSearchQuery(e.target.value)} />
setPriceRange({ ...priceRange, min: parseFloat(e.target.value) || 0 })} /> - setPriceRange({ ...priceRange, max: parseFloat(e.target.value) || 1000 })} />
{/* Service Listings */}
{filteredServices.map((service) => (
{service.name} {service.description}
{service.serviceType.replace('_', ' ')}
{renderStars(Math.floor(service.averageRating))} ({service.ratingCount})
{service.basePrice} AITBC
{service.reputation}
{service.completedJobs} jobs
{service.totalEarnings} AITBC
{service.tags.map((tag) => ( {tag} ))}
))}
Total Services
{analytics?.totalServices}

{analytics?.activeServices} active

Total Requests
{analytics?.totalRequests}

{analytics?.pendingRequests} pending

Total Volume
{analytics?.totalVolume} AITBC

Avg: {analytics?.averageServicePrice} AITBC

Total Guilds
{analytics?.totalGuilds}

Active guilds

); }; export default AgentServiceMarketplace;