#!/usr/bin/env python3

'''
Documentation, License etc.

@package pydiag
'''
import os
import os.path
import sys
import subprocess
from optparse import OptionParser
from viavi.evm.session import Session
from viavi.evm.coutput import ConsoleOutput
from viavi.evm.cinput import ConsoleInput
from viavi.evm.environment import Environment
from viavi.evm.projects import ProjectsList
from viavi.evm.logger import Logger


if __name__ == "__main__":
    usage = "usage: %prog [options] <target>"
    parser = OptionParser(usage=usage)
    parser.add_option("-c",
                      "--config",
                      dest="conf",
                      help="Add a configuration file (absolute path)",
                      default=None)
    parser.add_option("-l",
                      "--logger",
                      dest="logger",
                      help="Set log file (default /var/log/pydiag.log)",
                      default="/var/log/pydiag.log")
    parser.add_option("-d",
                      "--disablecolor",
                      dest="color",
                      help="Disable colors",
                      action="store_false",
                      default=True)
    (options, args) = parser.parse_args()
    session = Session.create()
    session.manage(ConsoleOutput.create(options.color))
    cin = ConsoleInput.create(True)
    session.manage(cin)
    session.manage(Environment.create())
    projects = ProjectsList.create()
    session.connect_event(projects, "RunEvent")
    find_module = False
    kver = subprocess.check_output(["uname","-r"]).strip().decode("utf-8")
    for module in os.listdir("/lib/modules"):
        if module == kver:
            find_module = True
    if not find_module:
        print("WARNING: Kernel don't match modules version")

    conflist = ["/etc/pydiag.conf"]
    if options.conf is not None:
        path = os.path.abspath(options.conf[0].strip())
        if os.path.isfile(path):
            conflist.append(path)

    if not os.path.isdir("/var/volatile/log"):
        os.mkdir("/var/volatile/log")

    if os.path.isdir("/etc/pydiag.conf.d"):
        conflist.extend(["/etc/pydiag.conf.d/%s" % f
                         for f in os.listdir("/etc/pydiag.conf.d")])

    logpath = os.path.abspath(options.logger)
    for conf in conflist:
        with open(conf, "r") as f:
            for l in f:
                if l.startswith("PATH:"):
                    session.add_module_path(l.split(":")[1].strip())
                elif l.startswith("LOAD:"):
                    projects.load(l.split(":")[1].strip())
                elif l.startswith("LOG:"):
                    logpath = os.path.abspath(l.split(":")[1].strip())
                elif l.startswith("PROMPT:"):
                    cin.set_prompt(l.split(":")[1].strip())
                elif l.startswith("PRERUN:"):
                    os.system("%s > /dev/null 2>&1"%l.split(":")[1].strip())

    logger = Logger.create(logpath)
    session.start()
    session.send_event("AppStart", "")
    session.join()
    logger.close()
