"""Python 3.10+, standard library. Put kinejing_client.py beside this file."""
import argparse
import base64
import json
from pathlib import Path
import sys
import uuid
from kinejing_client import KineJingClient,KineJingError

def main():
    parser=argparse.ArgumentParser(description='Experimental simulation actions; see your console for the applicable request price. No task-success guarantee.')
    parser.add_argument('--image',required=True,type=Path,help='Raw agentview RGB256 PNG')
    parser.add_argument('--wrist',required=True,type=Path,help='Raw wrist RGB256 PNG')
    parser.add_argument('--state',required=True,help='JSON array: eef XYZ, axis-angle XYZ, two gripper joint positions')
    parser.add_argument('--ack-experimental',action='store_true',required=True)
    parser.add_argument('--idempotency-key',default=None,help='Reuse the SAME key and unchanged inputs to recover after an interrupted request')
    args=parser.parse_args()
    images=[]
    for path in (args.image,args.wrist):
        if path.stat().st_size>256*1024:parser.error('Each PNG must be at most 256 KiB')
        images.append(base64.b64encode(path.read_bytes()).decode())
    idem=args.idempotency_key or uuid.uuid4().hex
    print('Idempotency-Key: '+idem,file=sys.stderr)
    try:
        result=KineJingClient().actions(*images,json.loads(args.state),acknowledge_experimental=True,idempotency_key=idem)
    except KineJingError as error:
        print(json.dumps({'error':str(error),'status':error.status,'request_id':error.request_id,
                          'idempotency_key':error.idempotency_key,'receipt':error.receipt},ensure_ascii=False),file=sys.stderr)
        return 1
    print(json.dumps(result,ensure_ascii=False,indent=2));return 0

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