from mongoengine import Document, StringField, DateTimeField, ListField, IntField
from datetime import datetime

class MCQ(Document):
    task_id = StringField(required=True)
    filename = StringField(required=True)
    # subject can be a list (you already use list)
    subject = ListField(StringField(), default=list, null=True)
    topic = StringField(default=None)
    chapter = StringField(default=None)
    exam = StringField(default=None)
    sub_exam = StringField()
    question = StringField(required=True)
    question_number = StringField(default=None)
    page_number = IntField(default=None)

    option_a = StringField(required=True)
    option_b = StringField(required=True)
    option_c = StringField(required=True)
    option_d = StringField(required=True)

    figure_ref = StringField(null=True)
    correct_answer = StringField(required=True)
    explanation = StringField(null=True)
    created_at = DateTimeField(default=datetime.utcnow)

    # NEW fields to support view-files / download behavior
    file_path = StringField(null=True)    # persistent path to the uploaded PDF (absolute or relative)
    uploaded_by = StringField(null=True)  # who uploaded the file (from session/redis)
    user_name = StringField(null=True)    # legacy/display name used by the front-end

    meta = {'collection': 'mcq'}

    def to_json(self):
        return {
            'id': str(self.id),
            'task_id': self.task_id,
            'filename': self.filename,
            'question': self.question,
            'option_a': self.option_a,
            'option_b': self.option_b,
            'option_c': self.option_c,
            'option_d': self.option_d,
            'page_number': self.page_number,
            'question_number': self.question_number,
            'correct_answer': self.correct_answer,
            'explanation': self.explanation,
            'file_path': self.file_path,
            'uploaded_by': self.uploaded_by,
            'user_name': self.user_name,
            'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')
        }


# Optional alternate model (if you still use MCQ2)
class MCQ2(Document):
    output_file = StringField(null=True)
    question = StringField(required=True)
    options = ListField(StringField(), required=True)
    correct_answer = StringField(required=True)
    explanation = StringField(null=True)
    created_at = DateTimeField(default=datetime.utcnow)

    meta = {'collection': 'mcq'}

    def to_json(self):
        return {
            'id': str(self.id),
            'output_file': self.output_file,
            'question': self.question,
            'options': self.options,
            'correct_answer': self.correct_answer,
            'explanation': self.explanation,
            'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')
        }
