from mongoengine import Document, ReferenceField, IntField, DateTimeField
from datetime import datetime
from models.user import User
from models.course import Course

class UserCoursePurchase(Document):
    user_id = ReferenceField(User, required=True)
    course_id = ReferenceField(Course, required=True)
    purchase_coin_amount = IntField(required=True, min_value=0)
    purchase_date = DateTimeField(default=datetime.utcnow)
    last_opened_date = DateTimeField(default=None)          # NEW: updated when fetched
    status = IntField(default=1, choices=[0, 1])            # 1=success, 0=failed/cancelled

    meta = {
        'collection': 'user_course_purchase_history',
        'indexes': ['user_id', 'course_id', 'status', '-purchase_date']
    }

    def to_json(self):
        return {
            "id": str(self.id),
            "user_id": str(self.user_id.id) if self.user_id else None,
            "course_id": str(self.course_id.id) if self.course_id else None,
            "purchase_coin_amount": self.purchase_coin_amount,
            "purchase_date": self.purchase_date.isoformat() if self.purchase_date else None,
            "last_opened_date": self.last_opened_date.isoformat() if self.last_opened_date else None,
            "status": self.status
        }
