"""StarDawn private-session client. Read recruiting-api.txt before collecting."""
import argparse, json, pathlib, sys, urllib.request, urllib.error, urllib.parse, uuid, mimetypes
BASE = 'https://manager.stardawntalent.com/api/v1/recruiting'
p = argparse.ArgumentParser(description=__doc__)
p.add_argument('--key-file', required=True)
s = p.add_subparsers(dest='command', required=True)
g = s.add_parser('get'); g.add_argument('--query', default='action=home', help='URL query for the private sessions endpoint')
w = s.add_parser('write'); w.add_argument('--json', required=True, dest='json_file')
e = s.add_parser('eligibility'); e.add_argument('--json', required=True, dest='json_file')
u = s.add_parser('upload'); u.add_argument('--file', required=True); u.add_argument('--query', required=True, help='sessionId,batch,username,eligibilityCheckId,requestId,capturedAt URL query')
a = p.parse_args()
key = pathlib.Path(a.key_file).read_text(encoding='utf-8-sig').strip()
if not key.startswith('sdr_'): p.error('The file is not a StarDawn recruiting key')
headers = {'Authorization': 'Bearer '+key}; data = None
if a.command == 'get': url = BASE+'/sessions?'+a.query
elif a.command == 'upload':
    data = pathlib.Path(a.file).read_bytes(); headers['Content-Type'] = mimetypes.guess_type(a.file)[0] or 'application/octet-stream'; url = BASE+'/images?'+a.query
else:
    obj = json.loads(pathlib.Path(a.json_file).read_text(encoding='utf-8-sig'))
    if not obj.get('requestId'): p.error('Supply a UUID requestId in the saved JSON so retries reuse exactly the same request')
    data = json.dumps(obj, separators=(',', ':')).encode(); headers['Content-Type'] = 'application/json'; url = BASE+('/eligibility' if a.command=='eligibility' else '/sessions')
try:
    with urllib.request.urlopen(urllib.request.Request(url,data=data,headers=headers),timeout=60) as r: print(r.read().decode())
except urllib.error.HTTPError as exc:
    print('HTTP '+str(exc.code)+': '+exc.read().decode(),file=sys.stderr); sys.exit(1)
except (TimeoutError, urllib.error.URLError):
    print('Uncertain network response. Retry the exact saved request and requestId; do not generate another ID.',file=sys.stderr); sys.exit(2)
