#!/usr/bin/python

import dbus
import flimflam
import sys

if len(sys.argv) < 2:
    print "Usage: %s <GUID> [<property> <value>]" % (sys.argv[0])
    sys.exit(1)

print "Attempting to configure service %s" % (sys.argv[1])

flim = flimflam.FlimFlam(dbus.SystemBus())

params = { "GUID" : sys.argv[1] }
argv = sys.argv[2:]
while argv:
    property_key = argv[0]
    value = argv[1]
    if property_key in ["Priority"]:
        params[property_key] = int(value)
    elif property_key in ["AutoConnect", "WiFi.HiddenSSID", "EAP.UseSystemCAS",
      "SaveCredentials"]:
        params[property_key] = dbus.Boolean(value.lower() in ("true", "1"))
    else:
        params[property_key] = value

    argv = argv[2:]

service = flim.GetService(params)
properties = service.GetProperties(utf8_strings = True)

print "[ %s ]" % (service.object_path)

for key in properties.keys():
    print "    %s = %s" % \
        (key, flimflam.convert_dbus_value(properties[key], 4))

print
