#!/usr/bin/env python3
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from __future__ import print_function

import sys

import dbus
import flimflam

if len(sys.argv) < 4:
    print('Usage: %s <service-name> <property> <value>' % (sys.argv[0]))
    sys.exit(1)

(_, name, property_key, value) = sys.argv

flim = flimflam.FlimFlam()
service = flim.FindElementByProperty('Service', 'Name', name)

if not service:
    print('Could not find service: %s' % (sys.argv[1]))
    sys.exit(1)

if property_key in ['Priority']:
    service.SetProperty(property_key, int(value))
elif property_key in ['AutoConnect', 'WiFi.HiddenSSID', 'EAP.UseSystemCAs',
                      'SaveCredentials', 'LinkMonitorDisable',
                      'ManagedCredentials']:
    service.SetProperty(property_key,
                        dbus.Boolean(value.lower() in ('true', '1')))
else:
    service.SetProperty(property_key, value)
