"""Inspect an options order's quoted spread using the Tradytics response format."""
import argparse
import json
import os
from decimal import Decimal
from urllib.parse import urlencode
from urllib.request import urlopen


def quoted_spread(order):
    bid, ask = (order.get(field) for field in ("bid", "ask"))
    if bid is None or ask is None:
        return "quote unavailable"
    bid, ask = Decimal(str(bid)), Decimal(str(ask))
    if bid < 0 or ask <= 0 or bid > ask:
        return "quote unavailable"
    return f"${100 * (ask - bid):.2f} per standard contract"


parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--symbol", default="SPY")
parser.add_argument("--date", help="Historical session in YYYY-MM-DD. Requires a Pro API key.")
args = parser.parse_args()

if args.date:
    key = os.environ.get("TRADYTICS_API_KEY")
    if not key:
        parser.error("set TRADYTICS_API_KEY for the requested historical session")
    query = urlencode(dict(symbol=args.symbol.upper(), date=args.date, limit=5, apiKey=key))
    with urlopen(f"https://tradytics.com/api/public/v1/options/flow?{query}", timeout=20) as response:
        orders = json.load(response)["data"]
else:
    print("Illustrative public sample")
    orders = [
        {"symbol": "SPY", "kind": "sweep", "side": "bought", "bid": 2.00, "ask": 2.10},
        {"symbol": "SPY", "kind": "block", "side": "sold", "bid": 1.45, "ask": 1.50},
    ]

for order in orders:
    print(order["symbol"], order["kind"], order["side"], quoted_spread(order))
