from flask import Blueprint, flash, jsonify, redirect, render_template, request, session, url_for

from app.models import generate_referral_code, get_referral_stats
from app.routes.auth import current_user, login_required

referral_bp = Blueprint("referral", __name__, url_prefix="/referral")


@referral_bp.route("/")
@login_required
def referral_page():
    """Referral dashboard — view code, stats, share link."""
    user = current_user()
    if not user:
        return redirect(url_for("auth.login"))

    user_id = session["user_id"]
    code = generate_referral_code(user_id)  # generates if not exists
    stats = get_referral_stats(user_id)

    # Build share URL
    base_url = request.host_url.rstrip("/")
    share_url = f"{base_url}/auth/register?ref={code}"

    return render_template(
        "referral.html",
        user=user,
        code=code,
        stats=stats,
        share_url=share_url,
    )


@referral_bp.route("/stats", methods=["GET"])
@login_required
def referral_stats():
    """JSON endpoint for referral stats."""
    user = current_user()
    if not user:
        return jsonify({"error": "not authenticated"}), 401

    stats = get_referral_stats(session["user_id"])
    return jsonify(stats)


@referral_bp.route("/copy-code", methods=["POST"])
@login_required
def copy_code():
    """Copy referral code to clipboard (JSON response)."""
    user = current_user()
    if not user:
        return jsonify({"error": "not authenticated"}), 401

    code = generate_referral_code(session["user_id"])
    return jsonify({"code": code, "success": True})