"""Replicates harness/verify.py's witness+defect scoring path (no proof gate).

Prints the same fields the harness's score.json carries for the witness and
#DEFECT block: hc_verified, defect_hc/defect_required, yukon score.
"""
import sys, json
from heesch_verify.witness import verify_witness, VerifyConfig
from heesch_verify.defect import verify_defect
from heesch_verify.result import Result
from heesch_verify import score as score_mod
from heesch_verify.gates import IsohedralGate, Verdict

path = sys.argv[1]
text = open(path, encoding="utf-8").read()
outcome = verify_witness(text, VerifyConfig())
result, sub = outcome.result, outcome.submission
out = {"file": path, "hc_verified": result.hc_verified, "hh_verified": result.hh_verified,
       "cells": result.cell_count, "grid": sub.grid_id}
if sub.defect is not None:
    dres = verify_defect(frozenset(sub.cells), sub.grid, outcome.hc_corona,
                         sub.defect, outcome.contact,
                         allow_reflections=True)
    kw = {**result.__dict__}
    kw.update(defect_corona_level=dres.corona_level, defect_hc=dres.defect_hc,
              defect_hh=dres.defect_hh, defect_required=dres.required,
              defect_pocket_cells=dres.pocket_cells,
              defect_partial_tiles=dres.partial_tiles)
    result = Result(**kw)
    out.update(defect_level=dres.corona_level, defect_hc=dres.defect_hc,
               defect_required=dres.required, pocket_cells=dres.pocket_cells,
               partial_tiles=dres.partial_tiles,
               covered=f"{dres.required - dres.defect_hc}/{dres.required}")
out["yukon_score"] = score_mod.yukon_score(result)
gate = IsohedralGate(sub.grid).evaluate(frozenset(sub.cells))
out["gate_verdict"] = str(gate.verdict)
out["gate_detail"] = gate.detail
print(json.dumps(out, indent=2, default=str))
