from __future__ import annotations

import argparse
import json
from pathlib import Path
from typing import List

from db.brochure_taxonomy import audit_brochure_taxonomy_payload
from db.collection_brochure_seed import load_collection_brochure_seed
from db.session import get_session


def _collect_paths(*, file_path: str | None, folder_path: str | None) -> List[str]:
    paths: List[str] = []
    if file_path:
        paths.append(str(Path(file_path)))
    if folder_path:
        paths.extend(str(path) for path in sorted(Path(folder_path).glob("*.json")))
    return paths


def main() -> None:
    parser = argparse.ArgumentParser(description="Audit brochure taxonomy groups and canonical mapping readiness.")
    parser.add_argument("--file", default=None, help="Path to one brochure JSON file.")
    parser.add_argument("--folder", default=None, help="Folder containing brochure JSON files.")
    args = parser.parse_args()

    paths = _collect_paths(file_path=args.file, folder_path=args.folder)
    if not paths:
        raise SystemExit("Provide --file or --folder")

    results = []
    with get_session() as session:
        for path in paths:
            payload = load_collection_brochure_seed(path)
            results.append(
                {
                    "file_path": path,
                    "audit": audit_brochure_taxonomy_payload(payload, session=session),
                }
            )
    print(json.dumps({"file_count": len(results), "results": results}, indent=2))


if __name__ == "__main__":
    main()
