import datetime
from typing import ClassVar, Optional, List, Union
from ..base_nodes import CCBaseNode

class EntityTimetableBaseNode(CCBaseNode):
    start_date: datetime.date
    end_date: datetime.date

class WorkerTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'WorkerTimetable'
    worker_timetable_id: str

class TeacherTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'TeacherTimetable'
    teacher_timetable_id: str

class UserTeacherTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'UserTeacherTimetable'
    user_teacher_timetable_id: str

class StudentTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'StudentTimetable'
    student_timetable_id: str

class SchoolAdminTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'SchoolAdminTimetable'
    school_admin_timetable_id: str

class DeveloperTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'DeveloperTimetable'
    developer_timetable_id: str 

class SuperAdminTimetableNode(EntityTimetableBaseNode):
    __primarylabel__: ClassVar[str] = 'SuperAdminTimetable'
    super_admin_timetable_id: str

class TimetableLessonNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'TimetableLesson'
    subject_class: str
    date: datetime.date
    start_time: datetime.time
    end_time: datetime.time
    period_code: str

class PlannedLessonNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'PlannedLesson'
    date: datetime.date
    start_time: datetime.time
    end_time: datetime.time
    period_code: str
    subject_class: str
    year_group: str
    subject: str
    teacher_code: str
    planning_status: str
    topic_code: Optional[str] = None
    topic_name: Optional[str] = None
    lesson_code: Optional[str] = None
    lesson_name: Optional[str] = None
    learning_statement_codes: Optional[List[str]] = None
    learning_statements: Optional[List[str]] = None
    learning_resource_codes: Optional[List[str]] = None
    learning_resources: Optional[List[str]] = None