"""命令行试玩(M2 文字版):你坐一个座位,其余 AI,文字交互打一局 9 人预女猎。

  PYTHONPATH=src python -m genesis.werewolf.play                 # 真 AI(MiniMax),随机给你个身份
  PYTHONPATH=src python -m genesis.werewolf.play --seat 1        # 指定你坐 1 号
  PYTHONPATH=src python -m genesis.werewolf.play --brain random  # AI 用随机 bot(免费、快,验证流程)

web 版(/api/action + 前端牌桌)是 M3/M5;命令行这版先让你能亲手玩、跑通"人在环中"。
"""

from __future__ import annotations

import argparse
import random

from genesis.werewolf.brain import MindProvider
from genesis.werewolf.engine import RandomProvider, WerewolfEngine
from genesis.werewolf.human import CLIHuman, HumanSeatProvider


def main() -> None:
    ap = argparse.ArgumentParser()
    ap.add_argument("--seat", type=int, default=0, help="你坐第几号(0=随机)")
    ap.add_argument("--brain", default="llm", choices=["llm", "random"], help="AI 用真模型还是随机 bot")
    ap.add_argument("--board", default="9_swh")
    ap.add_argument("--world", default="worlds/werewolf")
    args = ap.parse_args()

    rng = random.Random()
    eng = WerewolfEngine(args.world, args.board, RandomProvider(rng), rng=rng)
    human = args.seat or rng.randint(1, eng.board.seats)

    if args.brain == "llm":
        from genesis.llm.lc_adapter import build_chat_model
        from genesis.werewolf.brain import load_personas
        model = build_chat_model(temperature=0.8, max_tokens=380, request_timeout=45)
        ai = MindProvider.for_game(eng, make_model=lambda **kw: model, personas=load_personas(args.world))
    else:
        ai = RandomProvider(rng)
    eng.provider = HumanSeatProvider(human, ai, CLIHuman(), eng.roles)

    role = eng.roles[eng.state.role_of(human)]
    print(f"\n========================================")
    print(f"  你是 {human} 号,身份【{role.name}】({'狼人阵营' if role.team == 'wolf' else '好人阵营'})")
    print(f"  {role.persona_hint}")
    print(f"  板子:{eng.board.name} | AI:{args.brain}")
    print(f"========================================")
    winner = eng.run_game()
    print(f"\n======== 对局结束:{'狼人' if winner == 'wolf' else '好人'}阵营胜利 ========")
    print("身份揭晓:", "  ".join(f"{s}号={eng.roles[r].name}" for s, r in sorted(eng.state.roles.items())))


if __name__ == "__main__":
    main()
