"""統制1: 利用者の権限を委任されたトークンを取得する。

デモでは簡単のため Resource Owner Password Grant を使う。
本番では認可コード + PKCE で利用者がログインし、RFC 8693 のトークン交換で
エージェント用（aud=agent-tools、権限は委任分だけ）のトークンに交換する。
"""

import os

import httpx

KEYCLOAK = os.getenv("KEYCLOAK_URL", "http://localhost:8180")
REALM = os.getenv("KEYCLOAK_REALM", "banking")


def token(username: str, password: str | None = None, client_id: str = "agent-concierge") -> str:
    r = httpx.post(
        f"{KEYCLOAK}/realms/{REALM}/protocol/openid-connect/token",
        data={"grant_type": "password", "client_id": client_id,
              "username": username, "password": password or username},
        timeout=10,
    )
    r.raise_for_status()
    return r.json()["access_token"]
