import logging

from wormhole_proof.config import WormholeConfig
from wormhole_proof.core.wormhole import run_experiment

logging.basicConfig(level=logging.DEBUG, format="%(levelname)s %(message)s")

cfg = WormholeConfig(
    steps=500,
    horizon_steps=40,
    epsilon=1e-3,
    base_step_scale=0.04,
    lambda_h=260.0,
    wormhole_step_scale=0.2,
    wormhole_budget_fraction=0.12,
    soft_rank=4,
    verify_tolerance=0.05,
    debt_repay_rate=0.05,
    lambda_c=12.0,
    max_packets=80,
    traversable_mu=0.05,
    traversable_window=8,
    hp_message_bits=3,
    hp_message_magnitude=0.18,
    hp_scramble_wait=8,
    hp_decode_packets=10,
    hp_decode_tolerance=0.035,
    shock_energy=0.06,
    shock_probe_gap=5,
)

result = run_experiment(cfg, seed=7)
for regime in result.regimes:
    metrics = regime.metrics
    print(
        regime.name,
        "throughput=", regime.throughput,
        "commits=", regime.commits,
        "invariant=", regime.invariant_ok,
        "hp_match=", metrics.hp_match_fraction,
        "soft_rank=", metrics.soft_active_rank_mean,
        "packets_sent=", metrics.packets_sent,
    )
