'use client' import { useState, useEffect, useRef } from 'react' // ============================================================================ // TYPES // ============================================================================ interface SearchResult { id: string title: string bundesland: string bundesland_name: string doc_type: string snippet: string relevance_score: number url: string last_updated: string } interface Message { id: string role: 'user' | 'assistant' | 'system' content: string sources?: SearchResult[] timestamp: Date } interface UserPreferences { bundesland: string | null schulform: string | null hasSeenWizard: boolean favorites: string[] recentSearches: string[] } // ============================================================================ // CONSTANTS // ============================================================================ const BUNDESLAENDER = [ { code: 'bw', name: 'Baden-Württemberg', emoji: '🏰' }, { code: 'by', name: 'Bayern', emoji: '🦁' }, { code: 'be', name: 'Berlin', emoji: '🐻' }, { code: 'bb', name: 'Brandenburg', emoji: '🦅' }, { code: 'hb', name: 'Bremen', emoji: '🔑' }, { code: 'hh', name: 'Hamburg', emoji: '⚓' }, { code: 'he', name: 'Hessen', emoji: '🦁' }, { code: 'mv', name: 'Mecklenburg-Vorpommern', emoji: '🐂' }, { code: 'ni', name: 'Niedersachsen', emoji: '🐴' }, { code: 'nw', name: 'Nordrhein-Westfalen', emoji: '🏛️' }, { code: 'rp', name: 'Rheinland-Pfalz', emoji: '🍇' }, { code: 'sl', name: 'Saarland', emoji: '⚒️' }, { code: 'sn', name: 'Sachsen', emoji: '⚔️' }, { code: 'st', name: 'Sachsen-Anhalt', emoji: '🏰' }, { code: 'sh', name: 'Schleswig-Holstein', emoji: '🌊' }, { code: 'th', name: 'Thüringen', emoji: '🌲' }, ] const SCHULFORMEN = [ { id: 'grundschule', name: 'Grundschule', icon: '🎒' }, { id: 'hauptschule', name: 'Hauptschule', icon: '📚' }, { id: 'realschule', name: 'Realschule', icon: '📖' }, { id: 'gymnasium', name: 'Gymnasium', icon: '🎓' }, { id: 'gesamtschule', name: 'Gesamtschule', icon: '🏫' }, { id: 'foerderschule', name: 'Förderschule', icon: '💚' }, { id: 'berufsschule', name: 'Berufsschule', icon: '🔧' }, ] const COMMON_QUESTIONS = [ 'Wie formuliere ich eine Bemerkung zur Arbeits- und Sozialverhalten?', 'Welche Noten dürfen im Zeugnis stehen?', 'Wann sind Zeugniskonferenzen durchzuführen?', 'Wie gehe ich mit Fehlzeiten um?', 'Welche Unterschriften sind erforderlich?', 'Wie werden Versetzungsentscheidungen dokumentiert?', ] // ============================================================================ // ONBOARDING WIZARD COMPONENT // ============================================================================ function OnboardingWizard({ onComplete }: { onComplete: (prefs: Partial) => void }) { const [step, setStep] = useState(0) const [bundesland, setBundesland] = useState(null) const [schulform, setSchulform] = useState(null) const steps = [ { title: 'Willkommen beim Zeugnis-Assistenten', subtitle: 'Ihr intelligenter Helfer für alle Fragen rund um Zeugnisse', }, { title: 'In welchem Bundesland unterrichten Sie?', subtitle: 'Wir zeigen Ihnen die passenden Verordnungen', }, { title: 'An welcher Schulform?', subtitle: 'So können wir die Informationen noch besser anpassen', }, { title: 'Alles eingerichtet!', subtitle: 'Sie können jetzt loslegen', }, ] return (
{/* Progress */}
{/* Content */}
{/* Step 0: Welcome */} {step === 0 && (
📋

{steps[0].title}

{steps[0].subtitle}

🔍

Schnelle Suche in Verordnungen

💬

KI-gestützte Antworten

📚

Alle 16 Bundesländer

)} {/* Step 1: Bundesland */} {step === 1 && (

{steps[1].title}

{steps[1].subtitle}

{BUNDESLAENDER.map((bl) => ( ))}
)} {/* Step 2: Schulform */} {step === 2 && (

{steps[2].title}

{steps[2].subtitle}

{SCHULFORMEN.map((sf) => ( ))}
)} {/* Step 3: Complete */} {step === 3 && (

{steps[3].title}

{steps[3].subtitle}

Ihre Einstellungen:

{BUNDESLAENDER.find(b => b.code === bundesland)?.emoji} {BUNDESLAENDER.find(b => b.code === bundesland)?.name}
{SCHULFORMEN.find(s => s.id === schulform)?.icon} {SCHULFORMEN.find(s => s.id === schulform)?.name}
)}
{/* Navigation */}
) } // ============================================================================ // CHAT INTERFACE COMPONENT // ============================================================================ function ChatInterface({ messages, onSendMessage, isLoading, bundesland }: { messages: Message[] onSendMessage: (message: string) => void isLoading: boolean bundesland: string | null }) { const [input, setInput] = useState('') const messagesEndRef = useRef(null) const inputRef = useRef(null) useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }) }, [messages]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (input.trim() && !isLoading) { onSendMessage(input.trim()) setInput('') } } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault() handleSubmit(e) } } return (
{/* Messages */}
{messages.length === 0 ? (
💬

Stellen Sie eine Frage

Der Zeugnis-Assistent beantwortet Ihre Fragen basierend auf den offiziellen Verordnungen {bundesland ? `für ${BUNDESLAENDER.find(b => b.code === bundesland)?.name}` : ''}.

{COMMON_QUESTIONS.slice(0, 3).map((q, i) => ( ))}
) : ( messages.map((message) => (

{message.content}

{message.sources && message.sources.length > 0 && (

Quellen:

)}
)) )} {isLoading && (
)}
{/* Input */}