'use client' import { useState, useEffect } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import Link from 'next/link' // Types type FundingProgram = 'DIGITALPAKT_1' | 'DIGITALPAKT_2' | 'LANDESFOERDERUNG' | 'SCHULTRAEGER' type FederalState = 'NI' | 'NRW' | 'BAY' | 'BW' | 'HE' | 'SN' | 'TH' | 'SA' | 'BB' | 'MV' | 'SH' | 'HH' | 'HB' | 'BE' | 'SL' | 'RP' interface FormData { title: string funding_program: FundingProgram federal_state: FederalState preset_id: string } const API_BASE = process.env.NEXT_PUBLIC_SDK_API_URL || 'http://localhost:8080' const fundingPrograms = [ { value: 'DIGITALPAKT_2', label: 'DigitalPakt 2.0', description: 'Foerderung digitaler Bildungsinfrastruktur (2025-2030)' }, { value: 'DIGITALPAKT_1', label: 'DigitalPakt 1.0 (Restmittel)', description: 'Restmittel aus der ersten Phase' }, { value: 'LANDESFOERDERUNG', label: 'Landesfoerderung', description: 'Landesspezifische Foerderprogramme' }, { value: 'SCHULTRAEGER', label: 'Schultraegerfoerderung', description: 'Foerderung durch Schultraeger' }, ] const federalStates = [ { value: 'NI', label: 'Niedersachsen', flag: 'NI' }, { value: 'NRW', label: 'Nordrhein-Westfalen', flag: 'NRW' }, { value: 'BAY', label: 'Bayern', flag: 'BAY' }, { value: 'BW', label: 'Baden-Wuerttemberg', flag: 'BW' }, { value: 'HE', label: 'Hessen', flag: 'HE' }, { value: 'SN', label: 'Sachsen', flag: 'SN' }, { value: 'TH', label: 'Thueringen', flag: 'TH' }, { value: 'SA', label: 'Sachsen-Anhalt', flag: 'SA' }, { value: 'BB', label: 'Brandenburg', flag: 'BB' }, { value: 'MV', label: 'Mecklenburg-Vorpommern', flag: 'MV' }, { value: 'SH', label: 'Schleswig-Holstein', flag: 'SH' }, { value: 'HH', label: 'Hamburg', flag: 'HH' }, { value: 'HB', label: 'Bremen', flag: 'HB' }, { value: 'BE', label: 'Berlin', flag: 'BE' }, { value: 'SL', label: 'Saarland', flag: 'SL' }, { value: 'RP', label: 'Rheinland-Pfalz', flag: 'RP' }, ] const presets = [ { id: 'breakpilot_basic', name: 'BreakPilot Basis', description: 'Lokale KI-Arbeitsstation fuer eine Schule', budget: '~18.500 EUR', icon: ( ), color: 'blue', }, { id: 'breakpilot_cluster', name: 'BreakPilot Schulverbund', description: 'Zentrale KI-Infrastruktur fuer mehrere Schulen', budget: '~68.500 EUR', icon: ( ), color: 'purple', }, { id: '', name: 'Individuell', description: 'Leerer Wizard fuer eigene Projekte', budget: 'Flexibel', icon: ( ), color: 'slate', }, ] export default function NewFoerderantragPage() { const router = useRouter() const searchParams = useSearchParams() const [formData, setFormData] = useState({ title: '', funding_program: 'DIGITALPAKT_2', federal_state: 'NI', preset_id: searchParams.get('preset') || '', }) const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(null) // Set preset from URL params useEffect(() => { const preset = searchParams.get('preset') if (preset) { setFormData(prev => ({ ...prev, preset_id: preset })) // Auto-generate title based on preset const presetInfo = presets.find(p => p.id === preset) if (presetInfo && presetInfo.id) { setFormData(prev => ({ ...prev, preset_id: preset, title: `${presetInfo.name} - ${new Date().toLocaleDateString('de-DE')}`, })) } } }, [searchParams]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) if (!formData.title.trim()) { setError('Bitte geben Sie einen Projekttitel ein') return } setIsSubmitting(true) try { // In production, this would call the API // const response = await fetch(`${API_BASE}/sdk/v1/funding/applications`, { // method: 'POST', // headers: { 'Content-Type': 'application/json' }, // body: JSON.stringify(formData), // }) // const data = await response.json() // router.push(`/education/foerderantrag/${data.id}`) // For now, redirect to mock ID const mockId = 'demo-' + Date.now() router.push(`/education/foerderantrag/${mockId}`) } catch (err) { setError('Fehler beim Erstellen des Antrags') } finally { setIsSubmitting(false) } } const getPresetColorClasses = (color: string, isSelected: boolean) => { const colors: Record = { blue: { border: isSelected ? 'border-blue-500' : 'border-slate-200', bg: isSelected ? 'bg-blue-50' : 'bg-white', ring: 'ring-blue-500', }, purple: { border: isSelected ? 'border-purple-500' : 'border-slate-200', bg: isSelected ? 'bg-purple-50' : 'bg-white', ring: 'ring-purple-500', }, slate: { border: isSelected ? 'border-slate-500' : 'border-slate-200', bg: isSelected ? 'bg-slate-50' : 'bg-white', ring: 'ring-slate-500', }, } return colors[color] || colors.slate } return ( {/* Back Link */} Zurueck zur Uebersicht {/* Header */} Neuen Foerderantrag starten Waehlen Sie das Foerderprogramm und Ihr Bundesland. Der Wizard fuehrt Sie durch alle weiteren Schritte. {/* Preset Selection */} Schnellstart mit Preset (optional) {presets.map((preset) => { const isSelected = formData.preset_id === preset.id const colors = getPresetColorClasses(preset.color, isSelected) return ( setFormData(prev => ({ ...prev, preset_id: preset.id, title: preset.id ? `${preset.name} - ${new Date().toLocaleDateString('de-DE')}` : prev.title, }))} className={`relative p-4 rounded-xl border-2 text-left transition-all ${colors.border} ${colors.bg} ${isSelected ? 'ring-2 ' + colors.ring : ''}`} > {isSelected && ( )} {preset.icon} {preset.name} {preset.description} {preset.budget} ) })} {/* Funding Program */} Foerderprogramm * {fundingPrograms.map((program) => ( setFormData(prev => ({ ...prev, funding_program: e.target.value as FundingProgram }))} className="sr-only" /> {program.label} {formData.funding_program === program.value && ( )} {program.description} ))} {/* Federal State */} Bundesland * {federalStates.map((state) => ( setFormData(prev => ({ ...prev, federal_state: state.value as FederalState }))} className={`px-4 py-3 rounded-lg border-2 text-sm font-medium transition-all ${ formData.federal_state === state.value ? 'border-blue-500 bg-blue-50 text-blue-700' : 'border-slate-200 bg-white text-slate-700 hover:border-slate-300' }`} > {state.label} ))} {formData.federal_state === 'NI' && 'Niedersachsen ist der Pilot-Standort mit optimaler Unterstuetzung.'} {/* Project Title */} Projekttitel * setFormData(prev => ({ ...prev, title: e.target.value }))} placeholder="z.B. Digitale Lernumgebung fuer differenzierten Unterricht" className="w-full px-4 py-3 border border-slate-200 rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" maxLength={200} /> Ein aussagekraeftiger Titel fuer Ihr Foerderprojekt (max. 200 Zeichen) {/* Error */} {error && ( {error} )} {/* Actions */} Abbrechen {isSubmitting ? ( <> Wird erstellt... > ) : ( <> Wizard starten > )} {/* Help Box */} KI-Assistent verfuegbar Im Wizard steht Ihnen ein KI-Assistent zur Seite, der bei Fragen hilft, Formulierungen vorschlaegt und Sie durch den Antragsprozess fuehrt. ) }
Waehlen Sie das Foerderprogramm und Ihr Bundesland. Der Wizard fuehrt Sie durch alle weiteren Schritte.
{preset.description}
{preset.budget}
{program.description}
{formData.federal_state === 'NI' && 'Niedersachsen ist der Pilot-Standort mit optimaler Unterstuetzung.'}
Ein aussagekraeftiger Titel fuer Ihr Foerderprojekt (max. 200 Zeichen)
Im Wizard steht Ihnen ein KI-Assistent zur Seite, der bei Fragen hilft, Formulierungen vorschlaegt und Sie durch den Antragsprozess fuehrt.