import datetime
from typing import ClassVar
from ..base_nodes import CCBaseNode

class SchoolTimetableNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'SchoolTimetable'
    school_timetable_id: str
    start_date: datetime.date
    end_date: datetime.date

class AcademicYearNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'AcademicYear'
    year: str

class AcademicTermNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'AcademicTerm'
    term_name: str
    term_number: str
    start_date: datetime.date
    end_date: datetime.date

class AcademicTermBreakNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'AcademicTermBreak'
    term_break_name: str
    start_date: datetime.date
    end_date: datetime.date

class AcademicWeekNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'AcademicWeek'
    academic_week_number: str
    start_date: datetime.date
    week_type: str

class HolidayWeekNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'HolidayWeek'
    start_date: datetime.date
    
class AcademicDayNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'AcademicDay'
    academic_day: str
    date: datetime.date
    day_of_week: str
    day_type: str

class OffTimetableDayNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'OffTimetableDay'
    date: datetime.date
    day_of_week: str

class StaffDayNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'StaffDay'
    date: datetime.date
    day_of_week: str
    
class HolidayDayNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'HolidayDay'
    date: datetime.date
    day_of_week: str
        
class AcademicPeriodNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'AcademicPeriod'
    name: str
    date: datetime.date
    start_time: datetime.datetime
    end_time: datetime.datetime
    period_code: str

class RegistrationPeriodNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'RegistrationPeriod'
    name: str
    date: datetime.date
    start_time: datetime.datetime
    end_time: datetime.datetime
    period_code: str
    
class BreakPeriodNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'BreakPeriod'
    name: str
    date: datetime.date
    start_time: datetime.datetime
    end_time: datetime.datetime
    
class OffTimetablePeriodNode(CCBaseNode):
    __primarylabel__: ClassVar[str] = 'OffTimetablePeriod'
    name: str
    date: datetime.date
    start_time: datetime.datetime
    end_time: datetime.datetime
