from __future__ import annotations

import asyncio
import json

from app.api.dependencies import get_orchestrator
from tools.kenh_xay_gold_reference_ingest_support import (
    DEFAULT_INGEST_BATCH,
    DEFAULT_ROOT_DIR,
    MANIFEST_PATH,
    PROJECT_DEFAULTS_PATH,
    build_chunk_payload,
    load_manifest,
    load_schema,
)


async def main() -> None:
    # Giữ CLI cũ, chỉ tách helper ra file khác.
    schema = load_schema(PROJECT_DEFAULTS_PATH)
    manifest = load_manifest(MANIFEST_PATH)
    root_dir = DEFAULT_ROOT_DIR
    orchestrator = get_orchestrator()

    total_chunks = 0
    total_files_ready = 0
    total_files_skipped = 0
    file_summaries: list[dict[str, object]] = []

    for entry in manifest:
        payload, summary = build_chunk_payload(entry, schema, root_dir)
        if not payload:
            total_files_skipped += 1
            file_summaries.append(summary)
            continue

        inserted = await orchestrator.ingest_knowledge(
            task_type=str(payload[0]["metadata"]["task_type"]),
            chunks=payload,
        )
        total_files_ready += 1
        total_chunks += inserted
        summary["status"] = "ingested" if inserted else "empty"
        summary["chunks"] = inserted
        file_summaries.append(summary)

    output = {
        "status": "ok",
        "project_code": schema.get("project_defaults", {}).get(
            "project_code", "DS-HĐ26-004"
        ),
        "template_code": schema.get("project_defaults", {}).get(
            "template_code", "KX-KM-2026-TEMPLATE"
        ),
        "ingest_batch": DEFAULT_INGEST_BATCH,
        "manifest_path": str(MANIFEST_PATH),
        "schema_path": str(PROJECT_DEFAULTS_PATH),
        "total_manifest_records": len(manifest),
        "total_files_ready": total_files_ready,
        "total_files_skipped": total_files_skipped,
        "total_chunks": total_chunks,
        "files": file_summaries,
    }
    print(json.dumps(output, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    asyncio.run(main())
