from flask import Blueprint, request, jsonify
from datetime import datetime
from models.Coupon import Coupon
from models.EducoinsTopup import EducoinsTopup

coupon_bp = Blueprint("coupon_bp", __name__, url_prefix="/api")

# ✅ GET all active coupons
@coupon_bp.route('/coupons', methods=['GET'])
def get_active_coupons():
    active_coupons = Coupon.objects(status=1)

    result = [coupon.to_json() for coupon in active_coupons]

    return jsonify(result), 200

@coupon_bp.route('/apply-coupon', methods=['POST'])
def apply_coupon():
    data = request.get_json()
    coupon_code = data.get("coupon_code")
    topup_id = data.get("topup_id")

    if not coupon_code or not topup_id:
        return jsonify({"status": False, "message": "coupon_code and topup_id are required"}), 400

    # Step 1: Check if coupon exists
    coupon = Coupon.objects(coupon_code=coupon_code).first()
    if not coupon:
        return jsonify({"status": False, "message": "Invalid coupon code"}), 400

    # Step 2: Check if coupon is active
    if coupon.status != 1:
        return jsonify({"status": False, "message": "Coupon is inactive"}), 400

    # Step 3: Check expiry
    now = datetime.utcnow()
    if now < coupon.coupon_start_date or now > coupon.coupon_end_date:
        return jsonify({"status": False, "message": "Coupon is expired"}), 400

    # Step 4: Fetch Topup amount
    topup = EducoinsTopup.objects(id=topup_id, status=1).first()
    if not topup:
        return jsonify({"status": False, "message": "Invalid topup selected"}), 400

    subtotal = topup.topup_coin_value  # Assuming topup_coins represents amount
    discount_applied = 0

    if coupon.coupon_type == "flat":
        if coupon.coupon_value >= subtotal:
            return jsonify({"status": False, "message": "Invalid coupon code"}), 400
        discount_applied = coupon.coupon_value

    elif coupon.coupon_type == "percentage":
        discount_applied = (subtotal * coupon.coupon_value) // 100
        if discount_applied >= subtotal:
            return jsonify({"status": False, "message": "Invalid discount"}), 400

    amount_to_pay = subtotal - discount_applied

    return jsonify({
        "status": True,
        "message": "Coupon applied successfully",
        "subtotal": subtotal,
        "discount_applied": discount_applied,
        "amount_to_pay": amount_to_pay
}), 200