from __future__ import annotations

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


def write_json(path: Path, payload: Dict[str, Any]) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(
        json.dumps(payload, ensure_ascii=False, indent=2, sort_keys=True),
        encoding="utf-8",
    )


def build_manifest_payload(
    *,
    input_dir: str,
    output_dir: str,
    started_at: str,
    finished_at: str,
    total_files: int,
    decoded_files: int,
    skipped_files: int,
    failed_files: int,
    event_type_counts: Dict[str, int],
    errors_path: str,
) -> Dict[str, Any]:
    return {
        "input_dir": input_dir,
        "output_dir": output_dir,
        "started_at": started_at,
        "finished_at": finished_at,
        "total_files": total_files,
        "decoded_files": decoded_files,
        "skipped_files": skipped_files,
        "failed_files": failed_files,
        "event_type_counts": event_type_counts,
        "errors_path": errors_path,
        "generated_at": datetime.now().isoformat(),
    }
