from __future__ import annotations

import argparse
import json
from datetime import UTC, datetime
from pathlib import Path
from typing import Any, Dict

from db.brochure_vocabulary_taxonomy_transform import (
    transform_brochure_vocabulary_to_kitchen_taxonomy,
)


def export_kitchen_taxonomy_from_vocabulary(
    *,
    vocabulary_path: str,
    brochure_folder: str,
    output_path: str,
) -> Dict[str, Any]:
    payload = transform_brochure_vocabulary_to_kitchen_taxonomy(
        vocabulary_path=vocabulary_path,
        brochure_folder=brochure_folder,
    )
    payload["generated_at_utc"] = datetime.now(UTC).isoformat()
    payload["source_vocabulary_path"] = str(Path(vocabulary_path))
    payload["source_brochure_folder"] = str(Path(brochure_folder))

    out_path = Path(output_path)
    out_path.parent.mkdir(parents=True, exist_ok=True)
    out_path.write_text(json.dumps(payload, indent=2), encoding="utf-8")

    summary = payload.get("transform_summary") if isinstance(payload.get("transform_summary"), dict) else {}
    return {
        "status": "ok",
        "output_path": str(out_path),
        "collection_count": len(payload.get("collections") or {}),
        "confirmed_hierarchy_count": len((payload.get("master_taxonomy_reference") or {}).get("confirmed_hierarchy") or {}),
        "skipped_sku_count": int(summary.get("skipped_sku_count") or 0),
        "ambiguous_vocabulary_sku_count": len(summary.get("ambiguous_vocabulary_skus") or []),
    }


def main() -> None:
    parser = argparse.ArgumentParser(
        description="Transform brochure_sku_vocabulary.json into an import-ready kitchen taxonomy file."
    )
    parser.add_argument("--vocabulary", required=True, help="Path to brochure_sku_vocabulary.json")
    parser.add_argument("--brochure-folder", required=True, help="Folder containing brochure collection JSON payloads")
    parser.add_argument("--output", required=True, help="Output path for transformed taxonomy JSON")
    args = parser.parse_args()

    result = export_kitchen_taxonomy_from_vocabulary(
        vocabulary_path=args.vocabulary,
        brochure_folder=args.brochure_folder,
        output_path=args.output,
    )
    print(json.dumps(result, indent=2))


if __name__ == "__main__":
    main()
