'use client' import { useState, useEffect } from 'react' import { Sparkles, Copy, Check } from 'lucide-react' import { trpc } from '@/lib/trpc-client' interface AIGeneratorProps { type: 'news' | 'stelle' onApply?: (text: string) => void } const THINKING_STEPS = [ 'KI denkt nach…', 'Thema wird analysiert…', 'Recherchiere Inhalte…', 'Struktur wird geplant…', 'Einleitung wird formuliert…', 'Hauptteil wird ausgearbeitet…', 'Formulierungen werden verfeinert…', 'Fachbegriffe werden geprüft…', 'Absätze werden aufgeteilt…', 'Zwischenüberschriften werden gesetzt…', 'Stil wird angepasst…', 'Rechtschreibung wird kontrolliert…', 'Markdown wird formatiert…', 'Überschrift wird optimiert…', 'Fazit wird formuliert…', 'Länge wird angepasst…', 'Ton wird auf Zielgruppe abgestimmt…', 'Aufzählungen werden erstellt…', 'Fettungen werden gesetzt…', 'Satzfluss wird geprüft…', 'Grammatik wird überprüft…', 'Keywords werden eingebaut…', 'Einleitung wird überarbeitet…', 'Abschnitte werden umstrukturiert…', 'Wiederholungen werden entfernt…', 'Zeichensetzung wird geprüft…', 'Leerzeilen werden optimiert…', 'Fachlich wird validiert…', 'Lesbarkeit wird verbessert…', 'Zusammenfassung wird erstellt…', 'Text wird poliert…', 'Letzte Korrekturen…', 'Fast fertig…', ] export function AIGenerator({ type, onApply }: AIGeneratorProps) { const { data: org } = trpc.organizations.me.useQuery() const [prompt, setPrompt] = useState('') const [format, setFormat] = useState('markdown') const [loading, setLoading] = useState(false) const [generatedText, setGeneratedText] = useState('') const [copied, setCopied] = useState(false) const [stepIndex, setStepIndex] = useState(0) useEffect(() => { if (!loading) { setStepIndex(0); return } const interval = setInterval(() => { setStepIndex((i) => (i + 1) % THINKING_STEPS.length) }, 5000) return () => clearInterval(interval) }, [loading]) async function handleGenerate() { if (!prompt.trim()) return setLoading(true) setGeneratedText('') try { const res = await fetch('/api/ai/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt, type, format }), }) if (!res.ok) { throw new Error('Fehler bei der Generierung') } const data = await res.json() setGeneratedText(data.text) } catch (err) { alert((err as Error).message) } finally { setLoading(false) } } function handleCopy() { navigator.clipboard.writeText(generatedText) setCopied(true) setTimeout(() => setCopied(false), 2000) } if (org && !org.aiEnabled) return null return (