#!/usr/bin/env python
'''Test script to receive data from Feinstaubsensor'''
import sys
import os
import argparse
import requests
import json
import logging
import urllib.request


def cliParser(argv=None):
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-v', '--verbose', dest='verbose', action='store_const', default=False, const=True, help='Enable verbose mode')
    parser.add_argument('--url', dest='url', default="http://matthiaswilde.ddnss.de:8192/data.json", help='Sensor URL')

    args = parser.parse_args(argv)
    return args


def main(args):
    try:
        with urllib.request.urlopen(args.url) as url:
            data = json.loads(url.read().decode())
            logging.info(json.dumps(data, indent=4, sort_keys=True))

    except KeyboardInterrupt: # pragma: no cover
        return -1
    except Exception as e: # pragma: no cover
        import traceback
        logging.error('Exception: {}\n'.format(e))
        traceback.print_exc(file=sys.stdout)
        return -1
    finally:
        pass
    return 0


############################################################
if __name__ == '__main__': # pragma: no cover
    '''Program entry loading args and start main function'''
    args = cliParser()
    if args.verbose:
        logging.basicConfig(format='%(levelname)-8s: %(message)s', level=logging.DEBUG, stream=sys.stdout)
    else:
        logging.basicConfig(format='%(levelname)-8s: %(message)s', level=logging.INFO, stream=sys.stdout)

    if args.verbose:
        logging.debug("Run " + os.path.basename(__file__) + " with following args:")
        logging.debug(args)
    else:
        logging.info("Run " + os.path.basename(__file__))
    ret = main(args)
    if ret:
        logging.error('Finished {:s} with error {:d}.'.format(os.path.basename(__file__), ret))
    else:
        logging.info('Finished {:s} successfully.'.format(os.path.basename(__file__)))
    sys.exit(abs(ret))
