#!/usr/bin/env python3
"""Build 62_scores_data.js (page 62, the brutality + cinematic score board) from _tools/scores/<weapon>.json.

Each scores file is a JSON array of kills:
  {id, weapon, title, tier, kind: film|skin|mid, status: built|script, brut, cine, script, anim (null for scripts),
   brut_why, cine_why, script_why, anim_why, fix, scorer, sheet, len}
Run after every weapon is scored:  python3 _tools/make_62.py
"""
import glob, json, os, statistics, time

ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
NAMES = {
    'ar': 'ASSAULT RIFLE', 'beam': 'BEAM CANNON', 'bouncer': 'BOUNCER', 'burst': 'BURST RIFLE', 'cluster': 'CLUSTER LOBBER',
    'fists': 'FISTS', 'flamer': 'FLAMETHROWER', 'gl': 'GRENADE LAUNCHER', 'glue': 'GLUE GUN', 'golden': 'GOLDEN GUN',
    'gravflip': 'GRAVITY FLIPPER', 'hammer': 'SLEDGEHAMMER', 'handcannon': 'HAND CANNON', 'ice': 'ICE GUN', 'knife': 'BLINK KNIFE',
    'laser': 'LASER RIFLE', 'minigun': 'MINIGUN', 'pan': 'FRYING PAN', 'pistol': 'PISTOL', 'portalgun': 'PORTAL GUN',
    'pump': 'PUMP SHOTGUN', 'revolver': 'REVOLVER', 'rpg': 'ROCKET LAUNCHER', 'sabre': 'SPEED SABRE', 'sawedoff': 'SAWED-OFF',
    'scythe': 'SOUL SCYTHE', 'shrink': 'SHRINK RAY', 'smg': 'SMG', 'sniper': 'SNIPER', 'spear': 'SPEAR',
    'thammer': 'THUNDER HAMMER', 'tkglove': 'TELEKINESIS GAUNTLET', 'tpdagger': 'TELEPORT DAGGER',
}


def avg(xs):
    xs = [x for x in xs if isinstance(x, (int, float))]
    return round(statistics.mean(xs), 1) if xs else None


def main():
    weapons = []
    for f in sorted(glob.glob(os.path.join(ROOT, '_tools', 'scores', '*.json'))):
        w = os.path.splitext(os.path.basename(f))[0]
        kills = json.load(open(f))
        built = [k for k in kills if k.get('status') == 'built']
        weapons.append({
            'id': w, 'name': NAMES.get(w, w.upper()), 'page': f'58k_{w}.html',
            'brut': avg(k['brut'] for k in kills), 'cine': avg(k['cine'] for k in kills),
            'script': avg(k.get('script') for k in kills), 'anim': avg(k.get('anim') for k in built),
            'brutBuilt': avg(k['brut'] for k in built), 'cineBuilt': avg(k['cine'] for k in built),
            'n': len(kills), 'nBuilt': len(built), 'kills': kills,
        })
    data = {'built': time.strftime('%Y-%m-%d %H:%M'), 'weapons': weapons, 'pending': sorted(set(NAMES) - {w['id'] for w in weapons})}
    out = os.path.join(ROOT, '62_scores_data.js')
    tmp = out + '.tmp'
    with open(tmp, 'w') as fh:
        fh.write('window.S62 = ' + json.dumps(data, ensure_ascii=False) + ';\n')
    os.replace(tmp, out)
    print(f"62_scores_data.js: {len(weapons)} weapons scored, {sum(w['n'] for w in weapons)} kills; pending {len(data['pending'])}")


if __name__ == '__main__':
    main()
