"""Analysis routes: trends + recommendations.""" from flask import Blueprint, request, g, jsonify from auth import require_auth from services import analysis as analysis_svc from services import ai as ai_svc bp = Blueprint("analysis", __name__) @bp.route("/trends", methods=["GET"]) @require_auth def trends(): metric = request.args.get("metricType", "steps") s = request.args.get("startDate") e = request.args.get("endDate") return jsonify(analysis_svc.get_trends(metric, g.user_id, s, e)) @bp.route("/recommendations", methods=["GET"]) @require_auth def recommendations(): return jsonify(analysis_svc.get_recommendations(g.user_id)) @bp.route("/models", methods=["GET"]) @require_auth def models(): """Available LLMs and whether each one has credentials configured.""" return jsonify(ai_svc.list_models()) @bp.route("/ai-recommendations", methods=["GET"]) @require_auth def ai_recommendations(): """LLM recommendations. `?model=` picks one; omit it to use the chain. Always 200: when no model succeeds the rule engine answers instead, and meta.source says which produced the result. """ model = request.args.get("model") or None days = request.args.get("days", type=int) return jsonify(analysis_svc.get_ai_recommendations(g.user_id, model, days))