#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import sys
import threading
import time

import argparse
import datetime
import yaml

import stressberry


def _main(args):

    # Cool down first
    print('Cooldown...')
    stressberry.cooldown()

    # Start the stress test in another thread
    t = threading.Thread(target=stressberry.test_short, args=())
    t.start()

    times = []
    temps = []
    while t.is_alive():
        times.append(time.time())
        temps.append(stressberry.measure_temp())
        # Choose the sample interval such that we have a respectable number of
        # data points
        t.join(2.0)
        print('Current temperature: {}°C'.format(temps[-1]))

    # normalize times
    time0 = times[0]
    times = [tm - time0 for tm in times]

    args.outfile.write(
        '# This file was created by stressberry v{} on {}\n'
        .format(stressberry.__version__, datetime.datetime.now())
        )
    yaml.dump(
        {
            'name': args.name,
            'time': times,
            'temperature': temps,
        },
        args.outfile
        )
    return


def _parse_cmd_arguments():
    parser = argparse.ArgumentParser(
        description='Run stress test for the Raspberry Pi.'
        )
    parser.add_argument(
        '-v', '--version',
        help='display version information',
        action='version',
        version='stressberry {}, Python {}'.format(
            stressberry.__version__, sys.version
            )
        )
    parser.add_argument(
        '-n', '--name',
        type=str,
        default='stressberry data',
        help='name the data set (default: \'stressberry data\')',
        )
    parser.add_argument(
        'outfile',
        type=argparse.FileType('w'),
        help='output data file'
        )
    return parser.parse_args()


if __name__ == '__main__':
    _main(_parse_cmd_arguments())
