"""将 zcbot JSON suite 导出为 Inspect AI 可摄取的 JSONL。

Inspect 运行环境与项目 `.venv` 隔离；JSONL 是稳定交换契约。
"""
from __future__ import annotations

import json
from pathlib import Path

from .models import EvalSuite


def export_inspect_jsonl(suite: EvalSuite, output: Path) -> int:
    output.parent.mkdir(parents=True, exist_ok=True)
    lines: list[str] = []
    for case in suite.cases:
        record = {
            "id": case.id,
            "input": case.prompt,
            # zcbot 使用结构化 assertions 评分，不强行伪造单一字符串 target。
            "target": "",
            "metadata": {
                "name": case.name,
                "dimension": case.dimension,
                "weight": case.weight,
                "repetitions": case.repetitions or suite.default_repetitions,
                "timeout_s": case.timeout_s,
                "skill": case.skill,
                "model_profile": case.model_profile,
                "tags": list(case.tags),
                "assertions": [
                    {
                        "type": item.type,
                        "weight": item.weight,
                        "value": item.value,
                        "path": item.path,
                        "min_bytes": item.min_bytes,
                        "max_value": item.max_value,
                        "description": item.description,
                    }
                    for item in case.assertions
                ],
            },
        }
        lines.append(json.dumps(record, ensure_ascii=False))
    output.write_text("\n".join(lines) + "\n", encoding="utf-8")
    return len(lines)
