#!/usr/bin/python3
import logging
import sys
import os
import threading



currdir = os.path.dirname(os.path.abspath(sys.argv[0]))
if "scripts" in currdir:
    parentdir = os.path.dirname(currdir)
    sys.path.insert(0, parentdir)
from hedron.lib.deployment import *
from hedron.client.monitor import *

if __name__ == "__main__":
    # try:
    #     desktops = os.listdir("/etc/kcm/autostart/")
    #     for desktop in desktops:
    #         shutil.copy(os.path.join("/etc/kcm/autostart/", desktop), "/etc/xdg/autostart/")
    # except Exception as e:
    #     logging.exception(e)
    config = ConfigurationSingleton()
    # config.configobj.load(sys.argv)
    init_logging(config.configobj, "hedron-client")
    print(config.configobj.url)
    const = Constant()


    from hedron.module.incoming_hook import IncomingHook
    if const.api_version < 360:
        try:
            # TODO: Check 3.6 server availability. If available, connect to 3.6 server and restart hedron-client.
            for i in range(15):
                # Wait up to 15 seconds for network connection to KIM.
                try:
                    res = requests.get(url=config.configobj.url.split(":946")[0], timeout=1)
                    break
                except:
                    logging.info("Network not yet initialised. Waiting.")
                    time.sleep(1)
            systembus = dbus.SystemBus()
            obj = systembus.get_object("com.kylin.kydevmonit.domainhook", "/com/kylin/kydevmonit/domainhook")
            interface = dbus.Interface(obj, dbus_interface='com.kylin.kydevmonit.domainhook')
            kim_domain = config.configobj.url.replace("http://", "").replace("https://", "").split(":")[0]

            # Some project needs to enable hedron-client before join domain. So this 127.0.0.1 filtering is required.
            if kim_domain != "127.0.0.1":
                logging.info("KIM Domain: %s" % kim_domain)
                status, message = interface.check_kcm_availability(kim_domain)
                if status == 0:
                    logging.info("Upgrading.")
                    interface.init_kcm(kim_domain)
                else:
                    logging.error("Cannot upgrade to KCM 3.6 due to %s" % message)

        except Exception as e:
            logging.exception(e)
    from hedron.module.project_workarounds import network_access_alive_loop

    alive = threading.Thread(target=network_access_alive_loop, args=[])
    alive.start()
    clientMonitor = Monitor()
    clientMonitor.network_access_alive_thread = alive
    incoming_hook = IncomingHook()
    loop = threading.Thread(target=incoming_hook.loop.run, args=[])
    loop.start()
    sys.exit(clientMonitor.mainloop())