from flask import jsonify, request

from app.blueprints.api import api_bp
from app.services.analytics.trend_analytics import spending_by_category_monthly, monthly_totals


@api_bp.route("/analytics/spending-by-category")
def analytics_spending_by_category():
    months_back = request.args.get("months", 12, type=int)
    rows = spending_by_category_monthly(months_back=months_back)
    months_seen = sorted({(r.year, r.month) for r in rows})
    month_labels = [f"{y}-{m:02d}" for y, m in months_seen]
    categories = sorted({r.category_name for r in rows})
    data = {
        "labels": month_labels,
        "categories": categories,
        "series": {
            cat: [
                float(next(
                    (r.total for r in rows if r.year == y and r.month == m and r.category_name == cat),
                    0,
                ))
                for y, m in months_seen
            ]
            for cat in categories
        },
    }
    return jsonify(data)


@api_bp.route("/analytics/monthly-totals")
def analytics_monthly_totals():
    months = monthly_totals(24)
    return jsonify([
        {"year": m.year, "month": m.month, "total": float(m.total)}
        for m in months
    ])
