import sys
import time
from ib_async import IB, Stock, MarketOrder

ib = IB()
try:
    ib.connect('127.0.0.1', 7497, clientId=10)

    contract = Stock("MU", "SMART", "USD")
    ib.qualifyContracts(contract)

    order = MarketOrder("BUY", 1)
    trade = ib.placeOrder(contract, order)

    print(f"Order placed. ID: {trade.order.orderId}")

    # Wait up to 10 seconds for status to settle past PendingSubmit
    for _ in range(20):
        ib.sleep(0.5)
        status = trade.orderStatus.status
        if status not in ("PendingSubmit", "PreSubmitted", ""):
            break

    fill_price = trade.orderStatus.avgFillPrice or "pending"
    final_status = trade.orderStatus.status

    print(f"Order ID:    {trade.order.orderId}")
    print(f"Fill price:  {fill_price}")
    print(f"Status:      {final_status}")

    if final_status == "Filled":
        pass
    elif "cancel" in final_status.lower() or final_status == "Inactive":
        print("Order rejected. Log entries:")
        for entry in trade.log:
            print(" ", entry)
        sys.exit(1)

except Exception as e:
    print(f"Connection/order error: {e}")
    sys.exit(1)
finally:
    ib.disconnect()
