from imgui_bundle import hello_imgui
from model import *
from datetime import datetime

class AppState:
    current_class_id: int 
    current_lecture_id: int 
    current_student_id: int
    current_submission_id: int 

    def __init__(self):
        self.current_class_id = None 
        self.current_lecture_id = None 
        self.current_student_id = None 
        self.current_submission_id = None

    def update(self):
        
        clas = Class.select()
        self.current_class_id = clas[0].id if clas else None
        
        lectures = Lecture.select().where(Lecture.class_id == self.current_class_id)
        self.current_lecture_id = lectures[0].id if lectures else None 

        students = Student.select().where(Student.class_id == self.current_class_id)
        self.current_student_id = students[0].id if students else None
        
        submissions = Submission.select().where(Submission.lecture_id == self.current_lecture_id and Submission.student_id == self.current_student_id)
        self.current_submission_id = submissions[0].id if submissions else None
        
        LOG_DEBUG(f"Updated App State {repr(self)}")

    def __repr__(self):
        return f'''
        Class ID: {self.current_class_id}
        Lecture ID: {self.current_lecture_id}
        Student ID: {self.current_student_id}
        Submission ID: {self.current_submission_id}
        '''

def log(log_level: hello_imgui.LogLevel, msg: str) -> None:
    time = datetime.now().strftime("%X")
    hello_imgui.log(log_level, f"[{time}] {msg}")

LOG_DEBUG = lambda msg: log(hello_imgui.LogLevel.debug, msg)
LOG_INFO = lambda msg: log(hello_imgui.LogLevel.info, msg)
LOG_WARNING = lambda msg: log(hello_imgui.LogLevel.warning, msg)
LOG_ERROR = lambda msg: log(hello_imgui.LogLevel.error, msg)

