from models.old_papers_model import OldPapers
from bson import ObjectId
from flask import request, jsonify, Blueprint
from utils.jwt_service import jwt_required
from models.course import Course
from models.user_course_purchase_history import UserCoursePurchase
from datetime import datetime

old_papers_bp = Blueprint("old_papers", __name__)

@old_papers_bp.route('/get_old_papers_list', methods=['POST'])
@jwt_required
def get_old_papers_list():
    try:
        # Get user_id from JWT (assuming jwt_required sets request.user)
        user_id = getattr(request, "user_id", None)
        if not user_id:
            return jsonify({"status": False, "message": "Invalid user id"}), 401
        course_id = request.json.get('course_id')
        if not course_id or not user_id:
            return jsonify({"status": False, "message": "course_id and user_id are required"}), 400

        # Fetch course details from MetaData as per user_id
        course_details= Course.objects(id=ObjectId(course_id), status=1).first()
        is_purchased = 0
        is_expired = 0
        if user_id:
            purchase = UserCoursePurchase.objects(
                user_id=ObjectId(user_id),
                course_id=course_details.id,
                status=1
            ).first()
            if purchase:
                is_purchased = 1
                # Example expiry logic: course expires after 365 days
                expiry_days = course_details.duration
                if purchase.purchase_date and (datetime.utcnow() - purchase.purchase_date).days > expiry_days:
                    is_expired = 1

        # Only allow access if purchased and not expired
        if not is_purchased:
            return jsonify({"status": False, "message": "Course not purchased"}), 403
        if is_expired:
            return jsonify({"status": False, "message": "Course access has expired"}), 403
        
        old_papers = OldPapers.objects(course_id=ObjectId(course_id), status=1)

        result = [{
            "paper_id": str(paper.id),
            "paper_title": paper.paper_title,
            "duration": paper.duration,
            "video_file_path": paper.content_file_path,
            "number_of_questions": paper.number_of_questions,
            "created_date": paper.created_date.isoformat()
        } for paper in old_papers]

        return jsonify({
            "status": True,
            "is_purchased": is_purchased,
            "is_expired": is_expired,
            "data": result
        }), 200

    except Exception as e:
        return jsonify({"status": False, "message": str(e)}), 500