from mongoengine import Document, ReferenceField, StringField, IntField, DateTimeField, ListField
from datetime import datetime
from models.chapter import Chapters
from models.course import Course
from models.exam import Exam
from models.sub_exam import SubExam
from models.topic import Topic
from models.video_courses_model import VideoCourseSubject
from models.configuration import Language 

class MockTest(Document):
    # explicit categorization (no course matching)
    exam_id = ReferenceField(Exam, required=True)
    
    sub_exam_id = ReferenceField(SubExam, required=False, default=None)
    subject_id = ReferenceField(VideoCourseSubject, required=False, default=None)
    chapter_id = ReferenceField(Chapters, required=False, default=None)
    topic_id = ReferenceField(Topic, required= False, default=None)
    language_id = ReferenceField(Language, required=True) 




    course_id = ReferenceField(Course, required=False, default=None)

    title = StringField(required=True)
    duration = IntField(required=True)            # minutes
    total_questions = IntField(required=True)
    total_marks = IntField(required=True)
    status = IntField(default=1)                  # 1 active, 0 inactive
    instructions = StringField(required=True)
    created_date = DateTimeField(default=datetime.utcnow)

    meta = {
        'collection': 'mock_test',
        
    }

class MockTestQuestion(Document):
    mock_test = ReferenceField(MockTest, required=True)
    question_type = StringField(required=True, choices=('MCQ','Factual','Analytical',
       'CurrentAffairs','AssertionReason','MatchTheFollowing','Chronology',
       'QA','Essay','Descriptive'))
    topic = StringField()
    question = StringField(required=True)
    options = ListField(StringField(), default=[])
    answer = StringField(required=True)
    marks = IntField(default=1)
    created_date = DateTimeField(default=datetime.utcnow)
    meta = {'collection': 'mock_test_questions', 'indexes': ['mock_test', '-created_date']}

class TestInstruction(Document):
    exam = ReferenceField(Exam, required=True)
    instructions = StringField(required=True)
    updated_date = DateTimeField(default=datetime.utcnow)
    meta = {'collection': 'test_instruction', 'indexes': ['exam', '-updated_date']}
