#!/usr/bin/env python
'''Test script to send data to server'''
import sys
import os
import argparse
import requests
import json
import logging

from datetime import date
from datetime import datetime, timedelta

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))


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://localhost:8000/storedata.py', help='URL of servber to store data')
    args = parser.parse_args(argv)
    return args


def main(args):
    try:
        fn = os.path.abspath(os.path.join(os.path.dirname(__file__), 'testdata.json'))
        with open(fn) as f:
            data = json.load(f)

        r = requests.post(args.url, auth=('username', 'password'), verify=False, json=data)
        logging.info('Send data to: ' + str(args.url))
        logging.info('Data: \n' + str(data))
        logging.info('\nStatus: ' + str(r.status_code))
        logging.info('Received:\n' + r.text)

    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))
