import React, { useEffect, useState } from 'react'; import { useParams, Link, useNavigate } from 'react-router-dom'; import { AccessTime, ArrowBack, CalendarToday, Cancel, CheckCircle, Delete, Description, Edit, LocationOn, MenuBook, People } from '@mui/icons-material'; import useTimetableStore from '../../stores/timetableStore'; import { useUser } from '../../contexts/UserContext'; import { format, parseISO } from 'date-fns'; import Modal from '../../components/common/Modal'; const LessonPage: React.FC = () => { const { lessonId } = useParams<{ lessonId: string }>(); const navigate = useNavigate(); const { profile } = useUser(); const { currentLesson, currentTimetable, currentClass, lessonDetailLoading, lessonDetailError, fetchLessonDetail, deleteLesson, updateAttendance, clearCurrentLesson, } = useTimetableStore(); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [attendanceUpdating, setAttendanceUpdating] = useState(null); useEffect(() => { if (lessonId) { fetchLessonDetail(lessonId); } return () => { clearCurrentLesson(); }; }, [lessonId, fetchLessonDetail, clearCurrentLesson]); const handleDeleteLesson = async () => { if (!lessonId) return; if (confirm('Are you sure you want to delete this lesson?')) { await deleteLesson(lessonId); navigate(`/timetable/timetables/${currentTimetable?.id}`); } }; const handleAttendanceUpdate = async (studentId: string, status: 'present' | 'absent' | 'late' | 'excused') => { if (!lessonId) return; setAttendanceUpdating(studentId); await updateAttendance(lessonId, studentId, status); setAttendanceUpdating(null); }; const getStatusColor = (status: string) => { switch (status) { case 'present': return 'bg-green-100 text-green-700'; case 'absent': return 'bg-red-100 text-red-700'; case 'late': return 'bg-yellow-100 text-yellow-700'; case 'excused': return 'bg-blue-100 text-blue-700'; default: return 'bg-gray-100 text-gray-700'; } }; const isTeacher = profile?.role === 'teacher' || profile?.role === 'admin'; const isOwner = currentClass?.teacher_id === profile?.id; const canManage = isTeacher && isOwner; if (lessonDetailLoading) { return (
); } if (lessonDetailError) { return (

{lessonDetailError}

); } if (!currentLesson) { return (

Lesson not found

); } return (
{/* Breadcrumb */} {/* Header */}
Back to Timetable

{currentLesson.title}

{currentLesson.description && (

{currentLesson.description}

)}
{canManage && (
)}
{/* Lesson Details */}

Time & Location

Date

{format(parseISO(currentLesson.start_time), 'EEEE, MMMM d, yyyy')}

Time

{format(parseISO(currentLesson.start_time), 'HH:mm')} - {format(parseISO(currentLesson.end_time), 'HH:mm')}

{(currentLesson.location || currentLesson.room) && (

Location

{currentLesson.location} {currentLesson.location && currentLesson.room && ' - '} {currentLesson.room && `Room ${currentLesson.room}`}

)}

Class Information

Class

{currentClass?.name}

Timetable

{currentTimetable?.title}

{currentLesson.subject && (

Subject

{currentLesson.subject}

)}
{/* Attendance Section */} {currentLesson.attendance && currentLesson.attendance.length > 0 && (

Attendance

{currentLesson.attendance.map((record) => (
{record.student?.first_name?.[0]}{record.student?.last_name?.[0]}

{record.student?.first_name} {record.student?.last_name}

{record.student?.email}

{canManage ? (
{attendanceUpdating === record.student_id && (
)}
) : ( {record.status} )}
))}
)} {/* Edit Modal Placeholder */} setIsEditModalOpen(false)} title="Edit Lesson" >

Lesson editing form would go here...

); }; export default LessonPage;