from flask import request, jsonify, Blueprint
from utils.jwt_service import jwt_required
from models.ebooks_model import Ebook
from bson import ObjectId
from models.course import Course
from models.user_course_purchase_history import UserCoursePurchase
from datetime import datetime

ebooks_bp = Blueprint('ebooks', __name__)

@ebooks_bp.route('/ebooks_list', methods=['POST'])
@jwt_required
def ebook_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
        
        ebooks = Ebook.objects(course_id=ObjectId(course_id), status=1)
        result = [{
            "ebook_id": str(ebook.id),
            "title": ebook.title,
            "author": ebook.author,
            "publication_date": ebook.publication_date.isoformat() if ebook.publication_date else None,
            "file_path": ebook.file_path,
            "created_date": ebook.created_date.isoformat() if ebook.created_date else None
        } for ebook in ebooks]

        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