#! /usr/bin/env python
import pickle
from autobahn.twisted.component import Component, run
from twisted.internet.defer import inlineCallbacks
import os
import pprint
import argparse

parser = argparse.ArgumentParser(description="Show telemetry from HiPERCAM components")
parser.add_argument(
    "topic", help='topic to subscribe to, e.g "hipercam.slide.telemetry"'
)
args = parser.parse_args()

topic = args.topic

server = os.environ.get("WAMP_SERVER", "192.168.1.2")
component = Component(transports=f"ws://{server}:8080/ws", realm="realm1")


@component.on_join
@inlineCallbacks
def joined(session, details):
    print("session ready")

    def on_telemetry(data):
        telemetry = pickle.loads(data)

        ts = telemetry.pop("timestamp")
        ts.precision = 2
        pprint.pprint(ts.iso)
        pprint.pprint(telemetry.pop("state", None))
        pprint.pprint(telemetry)
        print("")

    try:
        yield session.subscribe(on_telemetry, topic)
        print("subscribed")
    except Exception as err:
        print(err)


run([component])
