'use client'; import { ArrowLeft, Wrench, LayoutGrid, GitFork, ExternalLink, BadgeCheck } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { ForkButton } from './ForkButton'; import type { MarketplaceTemplate } from '@mcpengine/ai-pipeline/types'; const CATEGORY_COLORS: Record = { CRM: 'bg-blue-600', eCommerce: 'bg-emerald-600', HR: 'bg-violet-600', Finance: 'bg-amber-600', Marketing: 'bg-pink-600', Support: 'bg-teal-600', ProjectMgmt: 'bg-orange-600', Scheduling: 'bg-cyan-600', Analytics: 'bg-rose-600', DevTools: 'bg-lime-600', Social: 'bg-fuchsia-600', Communication: 'bg-sky-600', Storage: 'bg-indigo-600', 'AI/ML': 'bg-purple-600', }; interface ToolInfo { name: string; description?: string | null; groupName?: string | null; inputSchema?: { properties?: Record; required?: string[] } | null; } interface TemplateDetailData extends MarketplaceTemplate { tools?: ToolInfo[]; readme?: string; relatedTemplates?: MarketplaceTemplate[]; } interface TemplateDetailProps { template: TemplateDetailData; } function getMethodFromToolName(name: string): string { const lower = name.toLowerCase(); if (lower.startsWith('create') || lower.startsWith('add') || lower.startsWith('post')) return 'POST'; if (lower.startsWith('update') || lower.startsWith('edit') || lower.startsWith('patch')) return 'PATCH'; if (lower.startsWith('delete') || lower.startsWith('remove')) return 'DELETE'; if (lower.startsWith('list') || lower.startsWith('get') || lower.startsWith('search') || lower.startsWith('fetch')) return 'GET'; return 'GET'; } const METHOD_COLORS: Record = { GET: 'bg-emerald-500/20 text-emerald-400', POST: 'bg-blue-500/20 text-blue-400', PUT: 'bg-amber-500/20 text-amber-400', PATCH: 'bg-orange-500/20 text-orange-400', DELETE: 'bg-red-500/20 text-red-400', }; export function TemplateDetail({ template }: TemplateDetailProps) { const router = useRouter(); const catColor = CATEGORY_COLORS[template.category] || 'bg-gray-600'; return (
{/* Back button */} {/* Header */}
{template.name.charAt(0).toUpperCase()}

{template.name}

{template.isOfficial && ( Official )}
{template.category} by {template.author?.name || 'Anonymous'}
{/* Description */}

{template.description || 'No description provided.'}

{/* Stats row */}
{template.toolCount} tools
{template.appCount} apps
{template.forkCount} forks
{/* Action buttons */}
{/* Tools section */} {template.tools && template.tools.length > 0 && (

Tools ({template.tools.length})

{template.tools.map((tool, i) => { const method = getMethodFromToolName(tool.name); return (
{method} {tool.name} {tool.description || ''}
); })}
)} {/* README section */} {template.readme && (

README

)} {/* Related templates */} {template.relatedTemplates && template.relatedTemplates.length > 0 && (

Related Templates

{template.relatedTemplates.map((related) => (
router.push(`/marketplace/${related.id}`)} className="p-4 rounded-lg bg-gray-800/50 border border-gray-800 cursor-pointer hover:border-gray-600 transition-all" >
{related.name.charAt(0).toUpperCase()}
{related.name}

{related.description}

))}
)}
); }