#!/opt/alt/python27/bin/python
"""
Module provides cpanel hook for validation lve package extension
"""

import os
import simplejson as json
import sys

from clcommon import validate_cpu, validate_int, memory_to_page

SCRIPT_NAME = os.path.basename(__file__)

def print_error_msg_and_exit(limit, value):
    limit_name = limit.split('_')[1].upper()
    if limit_name == 'CPU':
        limit_name = 'SPEED'
    elif limit_name == 'MEM':
        limit_name = 'VMEM'
    print 0, 'Invalid value for ' + str(limit_name) + ' : ' + str(value)
    sys.exit(1)

def need_validation(json_decode):
    """
    Return true if we need validate input data
    """
    if os.path.basename(json_decode['hook']['hook']) == SCRIPT_NAME and \
       json_decode["context"]['stage'] == 'pre':
        return True
    return False

if "__main__" == __name__:
    lines =  sys.stdin.read()
    json_decode = json.loads(lines)

    if need_validation(json_decode):
        hook_data = json_decode['data']
        for key, value in hook_data.iteritems():
            if key.startswith('lve_'):
                if value in ('DEFAULT', '', None):
                    continue
                elif key in ["lve_ncpu", "lve_iops", "lve_nproc", "lve_io", "lve_ep"]:
                    if value is not None:
                        if value != validate_int(value):
                            print_error_msg_and_exit(key, value)
                elif key in ["lve_pmem", "lve_mem"]:
                    temp = memory_to_page(value)
                    if temp is None:
                        print_error_msg_and_exit(key, value)
                elif key in ["lve_cpu"]:
                    temp = validate_cpu(value)
                    if temp is None:
                        print_error_msg_and_exit(key, value)
                else:  # UNKNOWN LVE LIMIT
                    print_error_msg_and_exit(key, value)
    print 1, 'Ok'
