#!/usr/bin/python

# Copyright (c) Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2018 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT

import os
import sys
import getopt
import shutil
import hashlib
import json

sys.path.append(os.path.abspath("/usr/share/lve/modlscapi/user"))
from lve_diagnostic import *
from exec_command import *
from distutils.version import LooseVersion
import mod_lsapi_stat

SOURCE = "/usr/share/lve/modlscapi/user"
ENABLED_FILE = "/usr/share/lve/modlscapi/global.enabled"


def touch(fname):
    try:
        os.utime(fname, None)
    except:
        open(fname, 'a').close()


def get_cl_num():
    result = exec_command("rpm -q --qf \"%{version}\n\" `rpm -q --whatprovides /etc/redhat-release`")
    return result[0]


def add_one_item_to_php_handler(path, needle):
    """
    Add one configuration string to php.handler
    """
    with open(path, "r+") as file:
        for line in file:
            if needle in line:
                break
        else:  # not found, we are at the eof
            file.write("%s\n" % needle)  # append missing data


def add_lines(path, lines):
    """
    Add lines to file
    """
    with open(path, "a") as f:
        for line in lines:
            add_one_item_to_php_handler(path, line.strip())


def remove_all_lines(path, lines):
    """
    Remove lines from file
    """
    with open(path, "a") as f:
        for line in lines:
            exec_command_out(
                """sed -i -e '/^[[:space:]]*%s[[:space:]]*$/d' %s""" % (line.strip().replace("/", "\\/"), path))


def getItem(txt1, txt2, op):
    try:
        i1 = int(txt1)
    except ValueError:
        i1 = -1
    try:
        i2 = int(txt2)
    except ValueError:
        i2 = -1
    if i1 == -1 or i2 == -1:
        if op == 0:
            return txt1 > txt2
        else:
            return txt1 < txt2
    else:
        if op == 0:
            return i1 > i2
        else:
            return i1 < i2


# Compare version of types xx.xx.xxx... and yyy.yy.yy.y..
# if xxx and yyy is numbers, than comapre as numbers
# else - comapre as strings
def verCompare(base, test):
    base = base.split(".")
    test = test.split(".")
    if (len(base) > len(test)):
        ln = len(test)
    else:
        ln = len(base)
    for i in range(ln):
        if getItem(base[i], test[i], 0):
            return 1
        if getItem(base[i], test[i], 1):
            return -1
    if len(base) == len(test):
        return 0
    elif len(base) > len(test):
        return 1
    else:
        return 0


def usage():
    print ''
    print 'Use following syntax to manage MODLSAPI DA utility:'
    print sys.argv[0] + " [OPTIONS]"
    print 'Options:'
    print "--stat - return statistics in json"


class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

    def disable(self):
        self.HEADER = ''
        self.OKBLUE = ''
        self.OKGREEN = ''
        self.WARNING = ''
        self.FAIL = ''
        self.ENDC = ''


verbose_level = 0
force_opt = 0

cp = get_cp()
try:
    opts, args = getopt.getopt(sys.argv[1:], "h",
                               ["help",  "stat"])
except getopt.GetoptError, err:
    # print help information and exit:
    print str(err)  # will print something like "option -a not recognized"
    usage()
    sys.exit(2)

for o, a in opts:
    if o in ("-h", "--help"):
        usage()
        sys.exit()
    elif o in ("--stat",):
        print mod_lsapi_stat.get(as_json=True)
    else:
        usage()
        sys.exit(2)
