"use client"; import { useEffect, useState } from "react"; import { cmsApi, Course, Module, Lesson } from "@/lib/api"; import Link from "next/link"; interface FullModule extends Module { lessons: Lesson[]; } export default function CourseEditor({ params }: { params: { id: string } }) { const [course, setCourse] = useState(null); const [modules, setModules] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const loadData = async () => { try { setLoading(true); // 1. Fetch course details const courseData = await fetch(`http://localhost:3001/courses/${params.id}`).then(res => res.json()); setCourse(courseData); // 2. Fetch modules const modulesData: Module[] = await fetch(`http://localhost:3001/modules?course_id=${params.id}`).then(res => res.json()); // 3. Fetch lessons for each module const fullModules = await Promise.all(modulesData.map(async (mod) => { const lessonsData: Lesson[] = await fetch(`http://localhost:3001/lessons?module_id=${mod.id}`).then(res => res.json()); return { ...mod, lessons: lessonsData }; })); setModules(fullModules); } catch (err) { console.error("Failed to load course data:", err); setError("Failed to load course details. Is the backend running?"); } finally { setLoading(false); } }; loadData(); }, [params.id]); const handleAddModule = async () => { const title = prompt("Module Title:"); if (!title) return; try { const newMod = await cmsApi.createModule(params.id, title, modules.length + 1); setModules([...modules, { ...newMod, lessons: [] }]); } catch { alert("Failed to create module"); } }; const handleAddLesson = async (moduleId: string) => { const title = prompt("Lesson Title:"); if (!title) return; try { // Default to 'video' for now as a content type const newLesson = await cmsApi.createLesson(moduleId, title, "video", 1); setModules(modules.map(mod => mod.id === moduleId ? { ...mod, lessons: [...mod.lessons, newLesson] } : mod )); } catch { alert("Failed to create lesson"); } }; const [isPublishing, setIsPublishing] = useState(false); const handlePublish = async () => { if (!course) return; setIsPublishing(true); try { await cmsApi.publishCourse(params.id); alert("Course published successfully to LMS!"); } catch (err) { console.error("Publish failed:", err); alert("Failed to publish course. Check if LMS service is reachable."); } finally { setIsPublishing(false); } }; if (loading) return
Loading editor...
; if (error) return
{error}
; return (
{/* ... navigation ... */}
Courses / {course?.title}

{course?.title}

Editor - Outline (ID: {params.id})

{modules.map((module) => (
Module {module.position}: {module.title}
{module.lessons.map(lesson => (
{lesson.content_type === 'video' ? '🎬' : '📄'} {lesson.title}
{lesson.transcription && CC} {lesson.content_type}
))}
))}
); }