"""exsdk 1.1.2 example. Requires EXSDK_TOKEN; no credentials are embedded."""
import os
import time
from exsdk import ExApi, CtpAccount

def ctp_account():
    return CtpAccount(
        broker_id=os.environ["CTP_BROKER_ID"],
        user_id=os.environ["CTP_USER_ID"],
        password=os.environ["CTP_PASSWORD"],
        front_url=os.environ["CTP_FRONT_URL"],
        app_id=os.environ["CTP_APP_ID"],
        auth_code=os.environ["CTP_AUTH_CODE"],
    )

def wait_ready(api):
    deadline = time.time() + 60
    while api.trading_status() != "READY":
        if not api.wait_update(deadline=deadline):
            raise TimeoutError("CTP synchronization timed out")

with ExApi(os.environ["EXSDK_TOKEN"], ctp_account()) as api:
    funds = api.watch_account()
    positions = api.watch_position()
    orders = api.watch_order()
    trades = api.watch_trade()
    wait_ready(api)
    print("Funds:", funds.data())
    print("Positions:", positions.data())
    while api.wait_update():
        if api.trading_status() != "READY":
            continue
        if funds.is_changing():
            print("Funds:", funds.data())
        if positions.is_changing():
            print("Positions:", positions.data())
        if orders.is_changing():
            print("Orders:", orders.data())
        if trades.is_changing():
            print("Trades:", trades.data())
