#!/usr/bin/python

import os
import re
import sys
import json

import subprocess

import xml.etree.ElementTree as ET

# Description keys to strip for multi-test readability
strips = ['Test: ', 'Type: ', 'PHP Benchmark Suite', ' ']


def action_set(key, val):
    action_cmd = ['action-set']
    key = key.strip().replace(' ', '-')

    if isinstance(val, dict):
        for k, v in val.iteritems():
            k = k.strip().replace(' ', '-')
            action_set('%s.%s' % (key, k), v)
        return

    action_cmd.append('%s=%s' % (key, val))
    subprocess.check_call(action_cmd)


test_file = sys.argv[1]

if not os.path.isfile(test_file):
    sys.exit(1)

tree = ET.parse(test_file)
root = tree.getroot()

for result in root.iter('Result'):
    desc = result.find('Description').text
    for s in strips:
        desc = desc.replace(s, '')

    test = result.find('Title').text.lower()
    desc = re.sub(r'[\W]', '-', desc.lower())
    value = result.find('Data').find('Entry').find('Value').text
    units = result.find('Scale').text

    print(test, desc, value, units)
    key = 'results.%s-%s' % (test, desc) if desc else 'results.%s' % test
    action_set(key, {'value': value, 'units': units})
