#!/usr/bin/env python3
from __future__ import annotations

import argparse
import asyncio
import json
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))

from backend.cache import write_json_cache
from backend.territory import agency_epci_codes, load_agency_config
from backend.connectors import api_geo, georisques


async def main() -> int:
    parser = argparse.ArgumentParser(description="Refresh public API caches for the AULA territory.")
    parser.add_argument("--georisques", action="store_true", help="Also fetch Georisques risks for each commune.")
    parser.add_argument("--limit", type=int, default=0, help="Optional limit for tests.")
    args = parser.parse_args()

    config = load_agency_config()
    data = await api_geo.fetch_agency_communes(agency_epci_codes())
    data["territory_config"] = config
    write_json_cache("agency_communes.json", data)
    print(f"API Geo: {len(data.get('communes', []))} communes cached")

    if args.georisques:
        communes = data.get("communes", [])
        if args.limit:
            communes = communes[:args.limit]
        risks = []
        for commune in communes:
            code = commune.get("code")
            try:
                risks.append(await georisques.fetch_risks_by_commune(code))
                print(f"Georisques: {code} ok")
            except Exception as exc:
                risks.append({"code_insee": code, "error": str(exc)})
                print(f"Georisques: {code} error {exc}")
        write_json_cache("georisques_communes.json", risks)
        print(f"Georisques: {len(risks)} commune results cached")

    return 0


if __name__ == "__main__":
    raise SystemExit(asyncio.run(main()))
