#!/usr/bin/env python3
import importlib.util
import os

import daemon
from i3notifier.data_manager import DataManager
from i3notifier.i3 import I3
from i3notifier.notification_fetcher import NotificationFetcher
from i3notifier.rofi_gui import RofiGUI


def get_user_config():

    config_path = os.path.join(
        os.environ["XDG_CONFIG_HOME"]
        if "XDG_CONFIG_HOME" in os.environ
        else os.path.join(os.environ["HOME"], ".config"),
        "i3",
        "i3_notifier_config.py",
    )

    if os.path.exists(config_path):
        spec = importlib.util.spec_from_file_location("i3_notifier_config", config_path)
        userconfig = importlib.util.module_from_spec(spec)
        spec.loader.exec_module(userconfig)
        return userconfig


config_list = []
userconfig = get_user_config()
if userconfig is not None:
    config_list = userconfig.config_list


if __name__ == "__main__":

    with daemon.DaemonContext():
        import dbus.mainloop.glib
        from gi.repository import GLib

        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

        data_manager = DataManager(config_list)
        gui = RofiGUI()
        i3 = I3()
        fetcher = NotificationFetcher(data_manager, gui, i3)

        try:
            GLib.MainLoop().run()
        except:
            print("Exiting...")
