'use client' import { useState, useEffect, useCallback } from 'react' import { useTheme } from '@/lib/ThemeContext' import { subjectsApi } from '@/lib/stundenplan/api' import type { TimetableSubject, CreateTimetableSubject } from '@/app/stundenplan/types' const initialForm: CreateTimetableSubject = { name: '', short_code: '', color: '#6366f1', is_main_subject: false, required_room_type: '', } export function FaecherManager() { const { isDark } = useTheme() const [items, setItems] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [showForm, setShowForm] = useState(false) const [submitting, setSubmitting] = useState(false) const [form, setForm] = useState(initialForm) const load = useCallback(async () => { setLoading(true); setError(null) try { const data = await subjectsApi.list() setItems(data || []) } catch (e) { setError(e instanceof Error ? e.message : 'Laden fehlgeschlagen') } finally { setLoading(false) } }, []) useEffect(() => { load() }, [load]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setSubmitting(true); setError(null) try { await subjectsApi.create(form) setForm(initialForm) setShowForm(false) await load() } catch (err) { setError(err instanceof Error ? err.message : 'Anlegen fehlgeschlagen') } finally { setSubmitting(false) } } const handleDelete = async (id: string) => { if (!confirm('Fach wirklich loeschen? Verbundene Stundentafel-Eintraege werden mitgeloescht.')) return try { await subjectsApi.remove(id) await load() } catch (err) { setError(err instanceof Error ? err.message : 'Loeschen fehlgeschlagen') } } const cardClass = isDark ? 'bg-white/10 border-white/20 text-white' : 'bg-white/80 border-black/10 text-slate-900' const inputClass = isDark ? 'bg-white/10 border-white/20 text-white placeholder-white/40' : 'bg-white border-slate-300 text-slate-900 placeholder-slate-400' return (

Faecher ({items.length})

{error &&
{error}
} {showForm && (
setForm({ ...form, name: e.target.value })} placeholder="z.B. Mathematik" className={`w-full px-3 py-2 rounded-lg border ${inputClass}`} />
setForm({ ...form, short_code: e.target.value.toUpperCase() })} placeholder="z.B. M" className={`w-full px-3 py-2 rounded-lg border ${inputClass}`} />
setForm({ ...form, color: e.target.value })} className="w-full h-10 rounded-lg border cursor-pointer" />
setForm({ ...form, required_room_type: e.target.value })} placeholder="z.B. Sporthalle" className={`w-full px-3 py-2 rounded-lg border ${inputClass}`} />
setForm({ ...form, is_main_subject: e.target.checked })} className="w-5 h-5" />
)} {loading ? (
Laedt…
) : items.length === 0 ? (
Noch keine Faecher angelegt.
) : (
{items.map(s => ( ))}
Farbe Name Kuerzel Hauptfach Raumtyp
{s.name} {s.short_code} {s.is_main_subject ? 'Ja' : '—'} {s.required_room_type || '—'}
)}
) }