'use client'; import { useEffect, useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import Image from 'next/image'; import apiService from '../../lib/apiService'; type Lesson = { id: string; title: string; duration: string; // "12:46" 형식 state: "제출완료" | "제출대기"; action: "복습하기" | "이어서 수강하기" | "수강하기"; }; type CourseDetail = { id: string; status: "수강 중" | "수강 예정" | "수강 완료"; title: string; goal: string; method: string; summary: string; // VOD · 총 n강 · n시간 n분 submitSummary: string; // 학습 제출 n/n thumbnail: string; lessons: Lesson[]; }; export default function CourseDetailPage() { const params = useParams(); const router = useRouter(); const [course, setCourse] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchCourse = async () => { if (!params?.id) return; try { setLoading(true); setError(null); const response = await apiService.getLecture(params.id as string); // API 응답 데이터를 CourseDetail 타입으로 변환 const data = response.data; // API 응답 구조에 맞게 데이터 매핑 // 실제 API 응답 구조에 따라 조정 필요 const courseDetail: CourseDetail = { id: String(data.id || params.id), status: data.status || "수강 예정", title: data.title || data.lectureName || '', goal: data.objective || data.goal || '', method: data.method || '', summary: data.summary || `VOD · 총 ${data.lessons?.length || 0}강`, submitSummary: data.submitSummary || '', thumbnail: data.thumbnail || data.imageKey || data.imageUrl || '/imgs/talk.png', lessons: (data.lessons || []).map((lesson: any, index: number) => ({ id: String(lesson.id || lesson.lessonId || index + 1), title: `${index + 1}. ${lesson.title || lesson.lessonName || ''}`, duration: lesson.duration || '00:00', state: lesson.isCompleted ? "제출완료" : "제출대기", action: lesson.isCompleted ? "복습하기" : (index === 0 ? "수강하기" : "이어서 수강하기"), })), }; setCourse(courseDetail); } catch (err) { console.error('강좌 조회 실패:', err); setError(err instanceof Error ? err.message : '강좌를 불러오는데 실패했습니다.'); } finally { setLoading(false); } }; fetchCourse(); }, [params?.id]); if (loading) { return (

교육 과정 상세보기

로딩 중...

); } if (error || !course) { return (

교육 과정 상세보기

{error || '강좌를 찾을 수 없습니다.'}

); } return (

교육 과정 상세보기

{/* 상단 소개 카드 */}
{course.title}
{course.status}

{course.title}

학습 목표: {course.goal}

학습 방법: {course.method}

{course.summary} {course.submitSummary && {course.submitSummary}}
{/* 차시 리스트 */}
{course.lessons.map((l) => { const isSubmitted = l.state === "제출완료"; const submitBtnStyle = l.state === "제출완료" ? "border border-transparent text-[#384fbf]" : "border " + (l.action === "이어서 수강하기" || l.action === "수강하기" ? "border-[#b1b8c0]" : "border-[#8c95a1]"); const rightBtnStyle = l.action === "이어서 수강하기" ? "bg-[#ecf0ff] text-[#384fbf]" : l.action === "수강하기" ? "bg-[#ecf0ff] text-[#384fbf]" : "bg-[#f1f3f5] text-[#4c5561]"; return (

{l.title}

{l.duration}

); })}
); }