"""exsdk 1.1.2 example. Requires EXSDK_TOKEN; no credentials are embedded."""
import os
import argparse
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")

parser = argparse.ArgumentParser(description="Explicit opt-in: sends a REAL cancellation request")
parser.add_argument("--execute", action="store_true")
parser.add_argument("--order-id")
args = parser.parse_args()
if not args.execute:
    print("No cancellation sent. Use --execute --order-id ... only after reviewing the order.")
    raise SystemExit(0)
if not args.order_id:
    parser.error("--order-id is required")
with ExApi(os.environ["EXSDK_TOKEN"], ctp_account()) as api:
    orders = api.watch_order()
    wait_ready(api)
    results = api.cancel_order(args.order_id)
    for result in results:
        print(result.status, result.order_id, result.message)
    if results:
        deadline = time.time() + 60
        while api.wait_update(deadline=deadline):
            order = orders.data().get(args.order_id)
            if order:
                print(order.status, order.cancel_pending, order.cancel_error)
                if not order.cancel_pending:
                    break
    print("Check the final broker order status; a submitted cancellation is not proof of cancellation.")
