"""정제된 배치 결과를 하나의 wiki_entries.json으로 통합."""
from __future__ import annotations

import json
from pathlib import Path


def main() -> None:
    refined_dir = Path("/tmp/refined")
    all_entries: list[dict] = []  # type: ignore[type-arg]

    for batch_file in sorted(refined_dir.glob("batch_*.json")):
        try:
            data = json.loads(batch_file.read_text(encoding="utf-8"))
            if isinstance(data, list):
                all_entries.extend(data)
                print(f"  {batch_file.name}: {len(data)}건 로드")
            else:
                print(f"  {batch_file.name}: 배열이 아님 — 스킵")
        except Exception as exc:
            print(f"  {batch_file.name}: 로드 실패 — {exc}")

    # ID 재부여 (순차 번호)
    for i, entry in enumerate(all_entries, start=1):
        entry["id"] = f"kakao-{i:03d}"

    # 품질 검증
    issues = []
    for entry in all_entries:
        title = entry.get("title", "")
        if len(title) < 10:
            issues.append(f"  [{entry['id']}] 제목 너무 짧음: '{title}'")
        if title.startswith("#궁금증"):
            issues.append(f"  [{entry['id']}] 제목이 원본 그대로: '{title}'")
        if entry.get("answer") == entry.get("question"):
            issues.append(f"  [{entry['id']}] 답변 = 질문 동일")
        kw = entry.get("keywords", [])
        if len(kw) < 3:
            issues.append(f"  [{entry['id']}] 키워드 부족: {kw}")

    # 카테고리 분포
    cat_dist: dict[str, int] = {}
    for entry in all_entries:
        cat = entry.get("category", "기타")
        cat_dist[cat] = cat_dist.get(cat, 0) + 1

    # confidence 분포
    conf_dist: dict[str, int] = {}
    for entry in all_entries:
        conf = entry.get("confidence", "medium")
        conf_dist[conf] = conf_dist.get(conf, 0) + 1

    output_path = Path("/home/jay/projects/insuwiki/scripts/kakao_knowledge/wiki_entries.json")
    output_path.write_text(
        json.dumps(all_entries, ensure_ascii=False, indent=2),
        encoding="utf-8",
    )

    print(f"\n=== 통합 결과 ===")
    print(f"총 항목 수: {len(all_entries)}건")
    print(f"\n카테고리 분포:")
    for cat, cnt in sorted(cat_dist.items(), key=lambda x: -x[1]):
        print(f"  {cat}: {cnt}건")
    print(f"\n신뢰도 분포:")
    for conf, cnt in sorted(conf_dist.items(), key=lambda x: -x[1]):
        print(f"  {conf}: {cnt}건")

    if issues:
        print(f"\n품질 이슈 ({len(issues)}건):")
        for issue in issues[:20]:
            print(issue)
        if len(issues) > 20:
            print(f"  ... 외 {len(issues)-20}건")
    else:
        print("\n품질 이슈 없음")

    print(f"\n저장 완료: {output_path}")
    print(f"파일 크기: {output_path.stat().st_size / 1024:.1f}KB")


if __name__ == "__main__":
    main()
