#!/usr/bin/env python3
"""Audit a full data object after authenticated R2 retrieval."""

from __future__ import annotations

import argparse
import csv
import io
import json
from pathlib import Path
from zipfile import ZipFile


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("archive", type=Path)
    args = parser.parse_args()
    members = rows = invalid = 0
    symbols: set[str] = set()
    dates: set[str] = set()
    with ZipFile(args.archive) as archive:
        for name in sorted(item for item in archive.namelist() if item.endswith(".txt")):
            members += 1
            symbols.add(Path(name).name.split("_")[0])
            with archive.open(name) as raw:
                reader = csv.DictReader(io.TextIOWrapper(raw, encoding="utf-8-sig"))
                for record in reader:
                    rows += 1
                    dates.add(record["<DTYYYYMMDD>"])
                    try:
                        if any(float(record[field]) <= 0 for field in ("<OPEN>", "<HIGH>", "<LOW>", "<CLOSE>")):
                            invalid += 1
                    except (KeyError, TypeError, ValueError):
                        invalid += 1
    print(json.dumps({
        "archive": str(args.archive),
        "archiveMembers": members,
        "symbols": len(symbols),
        "rows": rows,
        "firstDate": min(dates) if dates else None,
        "lastDate": max(dates) if dates else None,
        "tradingDates": len(dates),
        "nonPositiveOrInvalidRows": invalid,
    }, ensure_ascii=False))


if __name__ == "__main__":
    main()
