# VRP ranker: Volatility risk premium across a list, with earnings-free realized vol so the ranking is honest.
# https://apexvol.com/developers/recipes/vrp-ranker
import os
import sys

import requests

# One token, any paid or trial plan: Account, then API Access.
TOKEN = os.environ.get("APEXVOL_API_TOKEN") or sys.exit("set APEXVOL_API_TOKEN")
BASE = os.environ.get("APEXVOL_API_URL", "https://apexvol.com") + "/api/mcp/data"
S = requests.Session()
S.headers["Authorization"] = f"Bearer {TOKEN}"


def get(path, **params):
    r = S.get(BASE + path, params=params, timeout=90)
    body = r.json()
    if not body.get("success"):
        sys.exit(f"{path}: HTTP {r.status_code}: {body.get('error')}")
    return body["data"]


SYMBOLS = ["AAPL", "MSFT", "NVDA", "AMD", "TSLA", "AMZN"]
rows = []
for sym in SYMBOLS:
    d = get(f"/vrp/{sym}")
    rows.append((sym, d))

rows.sort(key=lambda kv: -(kv[1].get("volatility_risk_premium") or 0))
print(f"{'':7}{'IV 30d':>8}{'RV 30d':>8}{'VRP':>7}{'VRP ex-earn':>13}  earnings in window  assessment")
for sym, d in rows:
    vrp_ex = d.get("volatility_risk_premium_ex_earnings")
    ex_txt = f"{vrp_ex:>13.1f}" if isinstance(vrp_ex, (int, float)) else f"{'same':>13}"
    print(f"{sym:7}{d['implied_volatility']:>8.1f}{d['realized_volatility']:>8.1f}"
          f"{d['volatility_risk_premium']:>7.1f}{ex_txt}  {str(d.get('earnings_in_window')):>18}  {d['assessment']}")
print()
print("VRP is implied minus realized in annualised vol points; positive means options are paying more than the stock has moved.")
