#!/usr/bin/python3

import os
import sys
import glob
# ensure that typelib path points to the right directory,
# eg. $SNAP/usr/lib/x86_64-linux-gnu/girepository-1.0 on amd64
globpath = os.path.join(os.environ["SNAP"], "usr/lib/*/girepository-1.0")
os.environ["GI_TYPELIB_PATH"] = glob.glob(globpath)[0]

from gi.repository import GLib

import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)

BUS_NAME = 'io.snapcraft.SnapDbusService'
OBJECT_PATH = '/io/snapcraft/SnapDbusService'


class ServerObject(dbus.service.Object):
    @dbus.service.method('io.snapcraft.ExampleInterface')
    def ExampleMethod(self):
        return "hello world"


if __name__ == "__main__":
    if sys.argv[1] == 'session':
        bus = dbus.SessionBus()
    elif sys.argv[1] == 'system':
        bus = dbus.SystemBus()
    else:
        sys.stderr.write("Unknown D-Bus bus: {}\n".format(sys.argv[1]))
        sys.exit(1)

    main_loop = GLib.MainLoop()
    # Make sure we quit when the bus shuts down
    bus.add_signal_receiver(
        main_loop.quit, signal_name="Disconnected",
        path="/org/freedesktop/DBus/Local",
        dbus_interface="org.freedesktop.DBus.Local")

    server = ServerObject(bus, OBJECT_PATH)
    bus_name = dbus.service.BusName(
        BUS_NAME, bus, allow_replacement=True, replace_existing=True,
        do_not_queue=True)
    main_loop.run()
