from app.main.data_model.common.course import Course
from app.main.data_model.common.discussion import Discussion
from app.main.data_model.common.notion import Notion
from app.main.data_model.common.quiz import Quiz
from app.main.util import helpers


class CourseRepository:

    def __init__(self, session):
        self.session = session

    def get_course_by_title_and_client_id(self, title, client_id):
        return self.session.query(Course).filter(
            Course.title == title,
            Course.client_id == client_id
        ).first()

    def get_course_by_id(self, course_id):
        return self.session.query(Course).filter(Course.id == course_id).first()

    def is_course_exist(self, course_id):
        return self.get_course_by_id(course_id) is not None

    def get_courses_by_client_id(self, client_id):
        return self.session.query(Course).filter(
            Course.client_id == client_id
        ).all()

    def get_courses_by_ids(self, course_ids):
        return self.session.query(Course).filter(Course.id.in_(course_ids)).all()

    def get_elements_module_dict_by_trainaing_sessions(self, training_sessions_ids):
        notions = self.session.query(Notion).join(Discussion, Discussion.element_id == Notion.id).filter(
            Discussion.training_session_id.in_(training_sessions_ids)
        ).all()
        quizzes = self.session.query(Quiz).join(Discussion, Discussion.element_id == Quiz.id).filter(
            Discussion.training_session_id.in_(training_sessions_ids),
            Quiz.reference_object == helpers.QUIZ
        ).all()
        element_module_dict = {}
        if notions is not None:
            for notion in notions:
                element_module_dict[notion.id] = notion.module_id
        if quizzes is not None:
            for quiz in quizzes:
                element_module_dict[quiz.id] = quiz.module_id
        return element_module_dict


