#!/usr/bin/env python2

import dbus
import dbus.service
import dbus.mainloop.glib

import gobject

class Service(dbus.service.Object):
    connector = 'HDMI-1'
    resources = (1,     # serial
                 [      # crtc
                    [ 
                       0,    # serial
                       0,    # winsys_id
                       0, 0, 768, 1024,  # x, y, width, height
                       0,                # current mode
                       0,                # current transform (according to wayland proto
                       [0],              # all possible transforms
                       {},
                    ],
                 ],
                 [                 # outputs
                    [
                       0,          # serial
                       0,          # winsys_id
                       0,          # current_crtc
                       [0],        # possible_crtcs
                       connector,  # connector
                       [1],        # valid modes
                       [1],        # valid clones
                       {'vendor': 'puri.sm'},  # properties
                    ],
                 ],
                 [                 # modes
                    [
                       0,          # serial
                       0,          # XID
                       768, 1024,  # width, height
                       60,         # frequency
                       0,          # flags
                    ],
                 ],
                 768,              # max_width
                 10240,            # max_height
    )

    def run(self):
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        bus_name = dbus.service.BusName("org.gnome.Mutter.DisplayConfig", dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, "/org/gnome/Mutter/DisplayConfig")

        self._loop = gobject.MainLoop()
        print("Mocking mutter DisplayConfig DBus API")
        self._loop.run()

    @dbus.service.method("org.gnome.Mutter.DisplayConfig",
                         in_signature='',
                         out_signature='ua(uxiiiiiuaua{sv})a(uxiausauaua{sv})a(uxuudu)ii')
    def GetResources(self):
        print("GetResouces called")
        return self.resources

    @dbus.service.method("org.freedesktop.DBus.Properties", in_signature='ssv', out_signature='')
    def Set(self, s1, s2, v):
        print("Set called with %s %s" % (s1, s2))
        return


if __name__ == "__main__":
    Service("This is the service").run()