#!/usr/bin/env python3
"""
Download **VXX** and **VIX** option **quotes only** (no Greeks) for historical research, using the
same local **Theta Terminal** REST flow as ``build_theta_dataset.py`` (15:45 ET NBBO via
``/v2/bulk_at_time/option/quote``).

Output files (alongside SPY chunks)::

    RenTech/data/theta_chunks/vxx_1545_YYYY_MM.parquet
    RenTech/data/theta_chunks/vix_1545_YYYY_MM.parquet

Schema matches ``build_theta_dataset`` with ``--skip-greeks``: ``implied_vol`` and ``delta`` are NaN.

**Requirements:** Theta Terminal running, logged in, and your subscription must include these roots.

Example (default ≈ **10 years** through today, both underlyings, quotes only)::

    python RenTech/data_pipeline/download_theta_vxvix_options_quotes.py

Custom window and one symbol::

    python RenTech/data_pipeline/download_theta_vxvix_options_quotes.py \\
      --roots VXX --start-date 2016-01-04 --end-date 2026-04-02 --workers 2

SPY is unchanged; use ``build_theta_dataset.py --root SPY`` for the equity index ETF chain.
"""

from __future__ import annotations

import argparse
import sys
from datetime import date, timedelta
from pathlib import Path

_DATA_PIPE = Path(__file__).resolve().parent
if str(_DATA_PIPE) not in sys.path:
    sys.path.insert(0, str(_DATA_PIPE))

import build_theta_dataset as btd  # noqa: E402


def _parse_roots(s: str) -> list[str]:
    out = [x.strip().upper() for x in s.split(",") if x.strip()]
    return out or ["VXX", "VIX"]


def main() -> None:
    ap = argparse.ArgumentParser(
        description="Theta Terminal: VXX/VIX option quotes (no Greeks), ~15:45 ET, monthly Parquet."
    )
    ap.add_argument(
        "--roots",
        type=str,
        default="VXX,VIX",
        help="Comma-separated option roots (default: VXX,VIX).",
    )
    ap.add_argument(
        "--years",
        type=int,
        default=10,
        help="If --start-date omitted: calendar span ending today (default 10).",
    )
    ap.add_argument(
        "--start-date",
        type=str,
        default=None,
        help="YYYY-MM-DD start (default: today minus --years).",
    )
    ap.add_argument(
        "--end-date",
        type=str,
        default=None,
        help="YYYY-MM-DD end inclusive (default: today).",
    )
    ap.add_argument(
        "--workers",
        type=int,
        default=1,
        help="Parallel months (default 1). Same guidance as build_theta_dataset.",
    )
    ap.add_argument(
        "--timeout-sec",
        type=float,
        default=btd.REQUEST_TIMEOUT_SEC,
        help=f"HTTP read timeout to Terminal (default {btd.REQUEST_TIMEOUT_SEC}).",
    )
    args = ap.parse_args()

    end_d = date.fromisoformat(args.end_date) if args.end_date else date.today()
    if args.start_date:
        start_d = date.fromisoformat(args.start_date)
    else:
        start_d = end_d - timedelta(days=int(args.years) * 365)

    roots = _parse_roots(args.roots)
    for i, root in enumerate(roots):
        print(f"\n=== [{i + 1}/{len(roots)}] root={root}  {start_d} -> {end_d}  skip_greeks=True ===\n", flush=True)
        btd.build_dataset(
            root=root,
            start_date=start_d,
            end_date=end_d,
            workers=max(1, int(args.workers)),
            allow_quote_only=False,
            skip_greeks=True,
            request_timeout_sec=float(args.timeout_sec),
        )


if __name__ == "__main__":
    main()
