import React, { useState } from 'react'; import { useQuery, useMutation } from '@tanstack/react-query'; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { Loader2, Play, Users, MapPin, Calendar } from 'lucide-react'; import { toast } from 'sonner'; const BulkGenerator = () => { const [selectedTemplate, setSelectedTemplate] = useState(null); const [quantity, setQuantity] = useState(10); const [jobStatus, setJobStatus] = useState<'idle' | 'running' | 'complete'>('idle'); const { data: templates } = useQuery({ queryKey: ['templates'], queryFn: async () => { const res = await fetch('/api/assembler/templates'); return res.json(); } }); const runBulkJob = useMutation({ mutationFn: async () => { // Placeholder for actual bulk job logic (Phase 5.b) return new Promise((resolve) => setTimeout(resolve, 3000)); }, onMutate: () => setJobStatus('running'), onSuccess: () => { setJobStatus('complete'); toast.success(`Generated ${quantity} articles successfully!`); } }); return (

1. Select Template

{templates?.map((t: any) => (
setSelectedTemplate(t.id)} className={`p-3 rounded-md border cursor-pointer transition-colors ${selectedTemplate === t.id ? 'bg-primary/10 border-primary' : 'bg-card border-border hover:border-primary/50' }`} >
{t.pattern_name}
{t.structure_type || 'Custom'}
))}

2. Data Source

3. Quantity

setQuantity(Number(e.target.value))} min={1} max={1000} />

Job Queue & Results

{jobStatus === 'complete' ? (
Article Title Status SEO Score Date {Array.from({ length: 5 }).map((_, i) => ( Top 10 Plumbing Tips in New York Ready 92/100 {new Date().toLocaleDateString()} ))}
) : (

No jobs running

)}
); }; export default BulkGenerator;