"""Print a digest of recent 8-K events for one item code, grouped by filing day.

Item 2.02 (the default) is "Results of Operations and Financial Condition" —
the 8-K companies file when they report results. FilingPulse classifies items
by the official SEC code table; this script just presents what was filed.

Usage:
    export FILINGPULSE_API_KEY=fp_your_key
    python earnings_8k_digest.py --since 2026-08-01
    python earnings_8k_digest.py --item 5.02 --since 2026-08-01   # officer changes

Requires: pip install filingpulse
"""
import argparse
import datetime as dt
import os
import sys
from itertools import groupby

from filingpulse import FilingPulse


def main() -> None:
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument("--item", default="2.02", help="8-K item code (default 2.02)")
    ap.add_argument("--since", help="YYYY-MM-DD (default: 7 days back)")
    ap.add_argument("--limit", type=int, default=200)
    args = ap.parse_args()

    api_key = os.environ.get("FILINGPULSE_API_KEY")
    if not api_key:
        sys.exit("Set FILINGPULSE_API_KEY (free key: https://filingpulse.io/signup.html)")
    fp = FilingPulse(api_key=api_key,
                     base_url=os.environ.get("FILINGPULSE_BASE_URL",
                                             "https://api.filingpulse.io"))

    since = args.since or (dt.date.today() - dt.timedelta(days=7)).isoformat()
    events = fp.events(item=args.item, since=since, limit=args.limit)["data"]
    if not events:
        print(f"No item {args.item} events filed since {since}.")
        return

    caption = next(i["caption"] for e in events for i in e["items"]
                   if i["code"] == args.item)
    print(f"8-K item {args.item} ({caption}) since {since} — {len(events)} filings\n")

    def day(e):  # filed_date is YYYYMMDD as filed
        d = e["filed_date"] or ""
        return f"{d[:4]}-{d[4:6]}-{d[6:8]}" if len(d) == 8 else d

    for filed_day, group in groupby(events, key=day):
        print(filed_day)
        for e in group:
            other = [i["code"] for i in e["items"] if i["code"] != args.item]
            extra = f"  (also items {', '.join(other)})" if other else ""
            print(f"  {e['issuer']['name']}  [{e['form_type']}]{extra}")
        print()


if __name__ == "__main__":
    main()
