"""InFinBot observer workers; current ledger read-only, all entries disabled."""
import argparse,json,sys,time
from pathlib import Path
sys.path.insert(0,str(Path(__file__).resolve().parents[1]))
from worker_controls import WorkerControls
from risk_state import RiskState
from ledger_reporting import read_snapshot


def main():
    p=argparse.ArgumentParser(description=__doc__)
    p.add_argument('--worker',choices=['bot-worker-crypto','bot-worker-futures'],required=True)
    p.add_argument('--db-path',required=True);p.add_argument('--state-path',required=True)
    p.add_argument('--once',action='store_true');p.add_argument('--diagnostic',action='store_true')
    p.add_argument('--timeout-hours',default='6');args=p.parse_args()
    try:
        controls=WorkerControls(args.timeout_hours,state_path=args.state_path)
        while True:
            controls.check_countdown_lifeline();read_snapshot(args.db_path)
            result=RiskState(args.state_path).heartbeat(args.worker)
            print(json.dumps({'worker':args.worker,'status':'OBSERVER_HEARTBEAT_RECORDED',**result}),flush=True)
            if args.once:return 0
            time.sleep(15)
    except Exception:
        print(json.dumps({'worker':args.worker,'status':'WORKER_BLOCKED','allocated_units':'0.0000','live_execution_enabled':False}),flush=True);return 1


if __name__=='__main__':raise SystemExit(main())
