from mongoengine import Document, ReferenceField, StringField, IntField, DateTimeField, ListField
from datetime import datetime
from models.course import Course
from models.exam import Exam
from models.sub_exam import SubExam

class MockTest(Document):
    # explicit categorization (no course matching)
    exam_id = ReferenceField(Exam, required=True)
    sub_exam_id = ReferenceField(SubExam, 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',
        'indexes': ['exam_id', 'sub_exam_id', 'course_id', '-created_date']
    }

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']}
