#!/usr/bin/env python3
"""Flip the fake Frame's fault switches and read its state; `fakeframe-ctl help`.

Talks to the supervisor's control port, so it works the same over SSH
(`ssh frame fakeframe-ctl steam off`) and from the host container with
FAKEFRAME_CTL=http://fakeframe:9999.
"""
import json
import os
import sys
import urllib.error
import urllib.request

url = os.environ.get('FAKEFRAME_CTL', 'http://127.0.0.1:9999').rstrip('/')
req = urllib.request.Request(url + '/ctl', data=json.dumps({'args': sys.argv[1:]}).encode(),
                             headers={'Content-Type': 'application/json'})
try:
    with urllib.request.urlopen(req, timeout=60) as r:
        out = json.load(r)
except urllib.error.HTTPError as e:
    out = json.load(e)
except OSError as e:
    sys.exit(f'fakeframe-ctl: control port not answering ({e})')
if 'usage' in out:
    print(out['usage'])
elif 'error' in out:
    sys.exit(f"fakeframe-ctl: {out['error']}")
else:
    print(json.dumps(out, indent=1))
    if sys.argv[1:2] == ['ping'] and not out.get('ok'):
        sys.exit(1)
