#!/usr/bin/env python3

'''
Documentation, License etc.

@package pydiag
'''
import os
import os.path
import sys
import subprocess
from optparse import OptionParser
from jdsu.evm.session import Session
from jdsu.evm.coutput import ConsoleOutput
from jdsu.evm.cinput import ConsoleInput
from jdsu.evm.environment import Environment
from jdsu.evm.projects import ProjectsList
from jdsu.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")
    projects.load("syscommand")
    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())

    logger = Logger.create(logpath)
    os.system("killall rescue_iface  > /dev/null 2>&1")
    session.start()
    session.send_event("AppStart", "")
    session.join()
    logger.close()
