#!/usr/bin/env python3
"""Probe api_update directory on repodatos.atdt.gob.mx"""
import json, urllib.request, ssl, sys

ctx = ssl._create_unverified_context()
BASE = "https://repodatos.atdt.gob.mx/api_update/"

# Get list of all agencies
data = json.loads(urllib.request.urlopen(BASE, context=ctx, timeout=15).read())
agencies = [i["name"] for i in data if i.get("type") == "directory"]
print(f"Total agencies in api_update: {len(agencies)}")

total_files = 0
total_size = 0
agency_stats = []

for a in agencies:
    try:
        url = f"{BASE}{a}/"
        adata = json.loads(urllib.request.urlopen(url, context=ctx, timeout=10).read())
        files = [i for i in adata if i.get("type") == "file"]
        dirs = [i for i in adata if i.get("type") == "directory"]
        fsize = sum(i.get("size", 0) for i in files)
        total_files += len(files)
        total_size += fsize
        agency_stats.append((a, len(files), len(dirs), fsize))
    except Exception as e:
        agency_stats.append((a, -1, -1, 0))

# Sort by size
agency_stats.sort(key=lambda x: x[3], reverse=True)

print(f"\nTotal files across all agencies: {total_files}")
print(f"Total size (top-level only): {total_size/1073741824:.2f} GB")
print(f"\n{'Agency':<40} {'Files':>6} {'Dirs':>6} {'Size':>12}")
print("-" * 70)
for a, fc, dc, sz in agency_stats:
    if sz > 1048576:
        hr = f"{sz/1048576:.1f}MB"
    elif sz > 1024:
        hr = f"{sz/1024:.1f}KB"
    else:
        hr = f"{sz}B"
    print(f"{a:<40} {fc:>6} {dc:>6} {hr:>12}")
