#!python

"""AER Subscriber

Author: Yuhuang Hu
Email : duguyue100@gmail.com
"""

from __future__ import print_function, absolute_import

import json
import argparse

from pyaer.utils import expandpath, import_custom_module
from pyaer.comm import AERSubscriber

parser = argparse.ArgumentParser()
parser.add_argument("--url", type=str,
                    default="tcp://127.0.0.1",
                    help="AER Subscriber URL")
parser.add_argument("--port", type=int,
                    default=5099,
                    help="the port that connects this subscriber")
parser.add_argument("--topic", type=str,
                    default="",
                    help="Topic to subscribe")
parser.add_argument("--name", type=str,
                    default="",
                    help="Name of the subscriber")

parser.add_argument("--use_default_sub", action="store_true")

parser.add_argument("--custom_sub", type=expandpath,
                    default="",
                    help="path to the custom publisher class")
parser.add_argument("--custom_class", type=str,
                    default="",
                    help="custom publisher class name")

parser.add_argument("--custom_args", type=str,
                    default=None,
                    help="custom arguments, a JSON file")
parser.add_argument("--extra_configs", type=str,
                    default=None,
                    help="custom arguments, a JSON file")


args = parser.parse_args()

# print all options
print(json.dumps(args.__dict__, indent=4, sort_keys=True))

# define subscriber
if args.use_default_sub:
    # fall back to the default publisher
    subscriber = AERSubscriber(
        url=args.url, port=args.port, topic=args.topic,
        name=args.name)
    subscriber.logger.info("Use default subscriber")
else:
    if args.custom_args is not None:
        with open(args.custom_args, "r") as f:
            cfg = json(f)
    if args.extra_configs is not None:
        with open(args.extra_configs, "r") as f:
            extra_cfg = json(f)

    # use custom publisher
    CustomSubscriber = import_custom_module(args.custom_sub, args.custom_class)
    subscriber = CustomSubscriber(
        url=args.url, port=args.port, topic=args.topic, name=args.name,
        cfg=args.custom_args, extra_cfg=args.extra_configs)
    subscriber.logger.info(
        "Use custom subscriber {}".format(args.custom_class))

# Start sending data
subscriber.run()
