from datetime import datetime
from mongoengine import Document, ReferenceField, StringField, IntField, DateTimeField
from models.sub_exam import SubExam  # ReferenceField target
from models.exam import Exam  # ReferenceField target

class Course(Document):
    exam_id = ReferenceField(Exam, required=True)          # PK of models/exam.py
    sub_exam_id = ReferenceField(SubExam, required=True)   # PK of sub_exams_list
    course_image = StringField(null=True)   
    language = StringField(default=None)                    # Language of the course
    course_title = StringField(required=True)
    course_fee = IntField(required=True, min_value=0)        # coins (e.g., 1000)
    discounted_fee = IntField(default=0, min_value=0) # coins (e.g., 800)
    duration = IntField(required=True, min_value=0)            # NEW: duration in days
    status = IntField(default=1, choices=[0, 1])             # 1=active, 0=inactive
    position = IntField(default=0)
    created_date = DateTimeField(default=datetime.utcnow)

    meta = {
        'collection': 'courses',
        'indexes': ['exam_id', 'sub_exam_id', 'status', 'position', '-created_date']
    }

    def to_json(self):
        return {
            'id': str(self.id),
            'exam_id': str(self.exam_id.id) if self.exam_id else None,
            'sub_exam_id': str(self.sub_exam_id.id) if self.sub_exam_id else None,
            'course_image': self.course_image,
            'course_title': self.course_title,
            'language': self.language,
            'course_fee': self.course_fee,
            'discounted_fee': self.discounted_fee,
            'duration': self.duration,
            'status': self.status,
            'position': self.position,
            'created_date': self.created_date.isoformat() if self.created_date else None
        }
