#!/usr/bin/python

import dbus
import flimflam
import pprint
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 = argv[0]
    value = argv[1]
    if property in ["Priority"]:
        params[property] = int(value)
    elif property in ["AutoConnect", "WiFi.HiddenSSID", "EAP.UseSystemCAS",
      "SaveCredentials"]:
        params[property] = dbus.Boolean(value.lower() in ("true", "1"))
    else:
        params[property] = value

    argv = argv[2:]

flim.manager.ConfigureService(params)
