"""
CoT 思维链 Web 演示服务。

启动：python web_app.py
浏览器访问：http://127.0.0.1:8765
"""

from __future__ import annotations

import json
from pathlib import Path

from flask import Flask, Response, jsonify, request, send_from_directory

from service import list_questions, run_question_events, run_question_sync

WEB_DIR = Path(__file__).parent / "web"

app = Flask(__name__, static_folder=str(WEB_DIR / "static"), static_url_path="/static")


@app.route("/")
def index() -> Response:
    return send_from_directory(WEB_DIR, "index.html")


@app.get("/api/questions")
def api_questions():
    return jsonify({"questions": list_questions()})


@app.get("/api/runtime")
def api_runtime():
    from service import get_runtime_info

    return jsonify(get_runtime_info())


@app.post("/api/run")
def api_run():
    data = request.get_json(silent=True) or {}
    question_index = int(data.get("question_index", 1))
    try:
        return jsonify(run_question_sync(question_index))
    except Exception as exc:
        return jsonify({"error": str(exc)}), 400


@app.get("/api/stream/<int:question_index>")
def api_stream(question_index: int):
    def generate():
        try:
            for event in run_question_events(question_index):
                yield f"data: {json.dumps(event, ensure_ascii=False)}\n\n"
        except Exception as exc:
            err = {"type": "error", "message": str(exc)}
            yield f"data: {json.dumps(err, ensure_ascii=False)}\n\n"

    return Response(generate(), mimetype="text/event-stream; charset=utf-8")


if __name__ == "__main__":
    print("CoT Web 演示已启动")
    print("请在浏览器打开：http://127.0.0.1:8765")
    print("API Key 从系统环境变量 DASHSCOPE_API_KEY 读取")
    app.run(host="127.0.0.1", port=8765, debug=False, threaded=True)
