'use client' import { useState, useEffect, useCallback } from 'react' import { useTheme } from '@/lib/ThemeContext' import { assignmentsApi, classesApi, subjectsApi, teachersApi } from '@/lib/stundenplan/api' import type { TimetableAssignment, CreateTimetableAssignment, TimetableClass, TimetableSubject, TimetableTeacher, } from '@/app/stundenplan/types' const initialForm: CreateTimetableAssignment = { teacher_id: '', class_id: '', subject_id: '', } export function AssignmentsManager() { const { isDark } = useTheme() const [items, setItems] = useState([]) const [classes, setClasses] = useState([]) const [subjects, setSubjects] = useState([]) const [teachers, setTeachers] = 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 [asg, cls, sub, t] = await Promise.all([ assignmentsApi.list(), classesApi.list(), subjectsApi.list(), teachersApi.list(), ]) setItems(asg || []) setClasses(cls || []) setSubjects(sub || []) setTeachers(t || []) } 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 assignmentsApi.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('Lehrauftrag wirklich loeschen?')) return try { await assignmentsApi.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' : 'bg-white border-slate-300 text-slate-900' const prereqMissing = classes.length === 0 || subjects.length === 0 || teachers.length === 0 return (

Lehrauftraege ({items.length})

Welcher Lehrer unterrichtet welches Fach in welcher Klasse.

{prereqMissing && !loading && (
Zuerst Klassen, Faecher und Lehrer anlegen.
)} {error &&
{error}
} {showForm && (
)} {loading ? (
Laedt…
) : items.length === 0 ? (
Noch keine Lehrauftraege.
) : (
{items.map(a => ( ))}
Lehrer Klasse Fach
{a.teacher_name || a.teacher_id.slice(0, 8) + '…'} {a.class_name || a.class_id.slice(0, 8) + '…'} {a.subject_name || a.subject_id.slice(0, 8) + '…'}
)}
) }