"""后端 uvicorn 启动入口(规避 PowerShell wildcard 展开问题)。

CHANGE 2026-05-05 | F1-5a 走查发现:PS 7.6.1 即使用 --% stop-parsing token
仍在某些环境下展开 reload-exclude 的 wildcard,导致 click 报 "extra arguments"。
解决:把所有 wildcard 字符串封装在 Python 内部,ps1 只调本脚本,
PowerShell shell 不接触任何 wildcard 字符串。

参数解析:--port N(默认 8000),其他参数硬编码。
"""
from __future__ import annotations

import argparse
import sys

import uvicorn


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--port", type=int, default=8000)
    parser.add_argument("--host", type=str, default="127.0.0.1")
    args = parser.parse_args()

    uvicorn.run(
        "app.main:app",
        host=args.host,
        port=args.port,
        reload=True,
        # 业务规则:5 秒 graceful shutdown 失败强杀,避免 reload 卡死
        timeout_graceful_shutdown=5,
        # F1-5a 走查 reload 卡死预防:
        # tests/__pycache__/.md 改动不应触发 reload(浪费且潜在卡死风险)
        reload_excludes=[
            "tests/*",
            "**/__pycache__/*",
            "*.md",
        ],
        use_colors=False,
    )
    return 0


if __name__ == "__main__":
    sys.exit(main())
