#!/usr/bin/python
#
# Validator for 'latency' task limit spec
#

import pscheduler
import validate

logger = pscheduler.Log(quiet=True)

try:
    json = pscheduler.json_load(max_schema=1)
except ValueError as ex:
    pscheduler.succeed_json({
        "valid": False,
        "error": str(ex)
        })

valid, message = validate.limit_is_valid(json)

#make sure numeric ranges have upper that is greater than lower
if valid:
    numeric_ranges = [
        ("packet-count", "Packet Count"),
        ("packet-interval", "Packet Interval"),
        ("packet-timeout", "Packet Timeout"),
        ("packet-padding", "Packet Padding"),
        ("ctrl-port", "Control Ports"),
        ("data-ports", "Data Ports"),
        ("bucket-width", "Bucket Width"),
    ]
    for nr in numeric_ranges:
        #above would not validate if we get here
        if nr[0] not in json:
            continue
        elif json[nr[0]]["range"]["upper"] < json[nr[0]]["range"]["lower"]:
            valid = False
            message = "{0} must have range where upper is greater than lower".format(nr[1])
            break

#make sure duration ranges have upper that is greater than lower
if valid and "duration" in json:
    lower_dur = pscheduler.iso8601_as_timedelta(json["duration"]["range"]["lower"])
    upper_dur = pscheduler.iso8601_as_timedelta(json["duration"]["range"]["upper"])
    if upper_dur < lower_dur:
        valid = False
        message = "Duration must have range where upper is greater than lower"
    

result = {
    "valid": valid
}

logger.debug("limit valid = %s" % valid)

if not valid:
    result["message"] = message

pscheduler.succeed_json(result)
