"""Worker side (runs on prod through ssh): next [rerun|quick] | update <job> <state> [note] [version] | list
`next` with no lane = Astra re-runs only (tools/rerun_worker.py); `next quick` = lighter copies + use-in-games
(tools/lighter_worker.py). One running job per lane."""
import json, sys
import store
cmd = sys.argv[1]
with store.locked() as st:
    if cmd == 'next':
        ln = sys.argv[2] if len(sys.argv) > 2 else 'rerun'
        busy = [j for j in st['jobs'] if j['state'] == 'running' and store.lane(j) == ln]
        q = [j for j in st['jobs'] if j['state'] == 'queued' and store.lane(j) == ln]
        if busy or not q:
            print('{}'); sys.exit(0)
        j = q[0]; j['state'] = 'running'; j['started'] = store.now(); print(json.dumps(j))
    elif cmd == 'update':
        j = next(j for j in st['jobs'] if j['id'] == sys.argv[2])
        j['state'] = sys.argv[3]; j['note'] = sys.argv[4] if len(sys.argv) > 4 else j['note']
        if len(sys.argv) > 5: j['version'] = int(sys.argv[5])
        if j['state'] in ('done', 'failed'): j['finished'] = store.now()
        print(json.dumps(j))
    elif cmd == 'list':
        print(json.dumps(st['jobs'][-20:], indent=1))
