"""
Trang CHẤM MÙ xếp hạng 1-2-3 cho 3 mô hình trên BỘ TEST CỐ ĐỊNH (chủ dự án 29/09/2026: "lưu lại 10 mẫu hội
thoại này để khi có một mô hình nào khác chúng ta đem ra cho chạy test luôn, không cần gọi lại 3 model kia").

Bộ test nằm trên máy web, NGOÀI git (tin nhắn khách thật, có số điện thoại):
    private/du_lieu/bo_test_mo_hinh/
        ca_10.json                  10 hội thoại dài thật (113 lượt tin khách)
        ket_qua/<mô hình>.json      câu trả lời đã chạy — claude-opus-5, deepseek-v4.1-flash, gpt-6-sol (29/09)
        cham.json                   điểm đã chấm lần 29/09 (ca 01 chủ dự án xếp hạng, ca 02-10 Claude thang 10)

Thử một mô hình MỚI (chỉ gọi mô hình đó, toàn trình một mô hình, không dự phòng — xem thu/so_sanh.py):
    cd private/services/chatbot
    moitruong/bin/python thu/so_sanh.py ../../du_lieu/bo_test_mo_hinh/ca_10.json <mô hình> \\
        ../../du_lieu/bo_test_mo_hinh/ket_qua/<mô hình>.json agent
Rồi dựng trang so với kết quả đã lưu (thường: mô hình mới + mô hình chính + dự phòng):
    python thu/cham_mu/trang_cham.py <ra.html> <khoa.json> \\
        ket_qua/<mô hình mới>.json <tên> ket_qua/deepseek-v4.1-flash.json deepseek ket_qua/claude-opus-5.json opus
Đăng <ra.html> làm artifact có capability db (phiếu lưu ở collection "phieu"); <khoa.json> là bảng giải mã
A/B/C từng ca — giữ riêng, đừng đăng. Chạy lại với cùng <khoa.json> thì giữ nguyên thứ tự A/B/C (phiếu cũ còn khớp).
"""
import json
import os
import random
import sys

THU_MUC = os.path.dirname(os.path.abspath(__file__))


def dung(ra, khoa_ra, bo):
    theo_ma = [({c['ma']: c for c in json.load(open(tep, encoding='utf-8'))['ca']}, ten) for tep, ten in bo]
    khoa_cu = json.load(open(khoa_ra, encoding='utf-8')) if os.path.exists(khoa_ra) else {}
    ten_so = {ten: k for k, (_, ten) in enumerate(theo_ma)}
    rd = random.SystemRandom()
    ca, khoa = [], {}
    for ma in theo_ma[0][0]:
        if not all(ma in d for d, _ in theo_ma):
            continue
        if ma in khoa_cu and all(v in ten_so for v in khoa_cu[ma].values()):
            thu_tu = [ten_so[khoa_cu[ma][nhan]] for nhan in 'ABC']
        else:
            thu_tu = list(range(3))
            rd.shuffle(thu_tu)
        khoa[ma] = {nhan: theo_ma[k][1] for nhan, k in zip('ABC', thu_tu)}
        luot = []
        for j, l0 in enumerate(theo_ma[0][0][ma]['luot']):
            dong = {'khach': l0['khach']}
            for nhan, k in zip('abc', thu_tu):
                dong[nhan] = theo_ma[k][0][ma]['luot'][j]['bot']
            luot.append(dong)
        ca.append({'ma': ma, 'luot': luot})
    s = open(os.path.join(THU_MUC, 'khuon_xep_hang.html'), encoding='utf-8').read()
    du_lieu = json.dumps(ca, ensure_ascii=False).replace('</', '<\\/')
    open(ra, 'w', encoding='utf-8').write(s.replace('/*__DU_LIEU__*/[]', du_lieu))
    json.dump(khoa, open(khoa_ra, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)
    return len(ca), sum(len(c['luot']) for c in ca)


if __name__ == '__main__':
    if len(sys.argv) != 9:
        raise SystemExit(__doc__)
    so_ca, so_luot = dung(sys.argv[1], sys.argv[2], [(sys.argv[i], sys.argv[i + 1]) for i in (3, 5, 7)])
    print(so_ca, 'ca,', so_luot, 'lượt')
