'use client' import { Suspense, useState, useEffect } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import Link from 'next/link' import Header from '@/components/Header' import Footer from '@/components/Footer' import { useLanguage } from '@/lib/LanguageContext' 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 federalStates: { value: string; label: string }[] = [ { value: 'NI', label: 'Niedersachsen' }, { value: 'NRW', label: 'Nordrhein-Westfalen' }, { value: 'BAY', label: 'Bayern' }, { value: 'BW', label: 'Baden-Wuerttemberg' }, { value: 'HE', label: 'Hessen' }, { value: 'SN', label: 'Sachsen' }, { value: 'TH', label: 'Thueringen' }, { value: 'SA', label: 'Sachsen-Anhalt' }, { value: 'BB', label: 'Brandenburg' }, { value: 'MV', label: 'Mecklenburg-Vorpommern' }, { value: 'SH', label: 'Schleswig-Holstein' }, { value: 'HH', label: 'Hamburg' }, { value: 'HB', label: 'Bremen' }, { value: 'BE', label: 'Berlin' }, { value: 'SL', label: 'Saarland' }, { value: 'RP', label: 'Rheinland-Pfalz' }, ] export default function NewFoerderantragPage() { return ( }> ) } function NewFoerderantragContent() { const router = useRouter() const searchParams = useSearchParams() const { t, isRTL } = useLanguage() const presets = [ { id: 'breakpilot_basic', nameKey: 'fa_preset_basic_name', descKey: 'fa_preset_basic_desc', budgetKey: 'fa_preset_basic_budget', color: 'blue' }, { id: 'breakpilot_cluster', nameKey: 'fa_preset_cluster_name', descKey: 'fa_preset_cluster_desc', budgetKey: 'fa_preset_cluster_budget', color: 'purple' }, { id: '', nameKey: 'fa_preset_custom_name', descKey: 'fa_preset_custom_desc', budgetKey: 'fa_preset_custom_budget', color: 'slate' }, ] const fundingPrograms = [ { value: 'DIGITALPAKT_2', labelKey: 'fa_program_dp2' }, { value: 'DIGITALPAKT_1', labelKey: 'fa_program_dp1' }, { value: 'LANDESFOERDERUNG', labelKey: 'fa_program_landes' }, { value: 'SCHULTRAEGER', labelKey: 'fa_program_traeger' }, ] 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) useEffect(() => { const preset = searchParams.get('preset') if (preset) { const presetInfo = presets.find(p => p.id === preset) if (presetInfo && presetInfo.id) { setFormData(prev => ({ ...prev, preset_id: preset, title: `${t(presetInfo.nameKey)} - ${new Date().toLocaleDateString('de-DE')}`, })) } } }, [searchParams]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) if (!formData.title.trim()) { setError(t('fa_project_title_label')) return } setIsSubmitting(true) try { const mockId = 'demo-' + Date.now() router.push(`/foerderantrag/${mockId}`) } catch { setError('Error') } 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 */} {t('fa_back_overview')} {/* Header */} {t('fa_new_title')} {t('fa_new_subtitle')} {/* Preset Selection */} {t('fa_preset_label')} {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 ? `${t(preset.nameKey)} - ${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 && ( )} {t(preset.nameKey)} {t(preset.descKey)} {t(preset.budgetKey)} ) })} {/* Funding Program */} {t('fa_program_label')} * {fundingPrograms.map((program) => ( setFormData(prev => ({ ...prev, funding_program: e.target.value as FundingProgram }))} className="sr-only" /> {t(program.labelKey)} {formData.funding_program === program.value && ( )} ))} {/* Federal State */} {t('fa_state_label')} * {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' && ( {t('fa_ni_hint')} )} {/* Project Title */} {t('fa_project_title_label')} * setFormData(prev => ({ ...prev, title: e.target.value }))} placeholder={t('fa_project_title_label')} 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} /> {/* Error */} {error && ( {error} )} {/* Actions */} {t('fa_cancel')} {isSubmitting ? ( <> {t('fa_wizard_saving')} > ) : ( <> {t('fa_submit')} > )} {/* Help Box */} {t('fa_ai_hint_title')} {t('fa_ai_hint_text')} > ) }
{t('fa_new_subtitle')}
{t(preset.descKey)}
{t(preset.budgetKey)}
{t('fa_ni_hint')}
{t('fa_ai_hint_text')}