import time
from spotflow_device import DesiredProperties, DeviceClient

DEFAULT_SPEED = 10

properties = {
    "settings": {
        "speed": DEFAULT_SPEED
    },
    "status": {
        "lastMaintenance": "2024-02-04"
    }
}

# Immediately print all changes of Desired Properties
def desired_properties_updated_callback(desired_properties: DesiredProperties):
    print(f"[Callback] Received Desired Properties (version {desired_properties.version}): {desired_properties.values}")

# Connect to the Platform
client = DeviceClient.start(device_id="robo-arm", provisioning_token="<Your Provisioning Token>",
                            db="spotf_robo-arm.db", desired_properties_updated_callback=desired_properties_updated_callback)

# Synchronize the configuration and status

desired_properties_version = None

print("Setting Reported Properties to initial state")
client.update_reported_properties(properties)

while True:
    desired_properties = client.get_desired_properties_if_newer(desired_properties_version)
    if desired_properties is not None:
        print(f"Received Desired Properties of version {desired_properties.version}")

        if 'settings' in desired_properties.values and 'speed' in desired_properties.values['settings']:
            print("Updating the speed to {}".format(desired_properties.values['settings']['speed']))
            properties['settings']['speed'] = desired_properties.values['settings']['speed']

        desired_properties_version = desired_properties.version
    
        print("Updating Reported Properties")
        client.update_reported_properties(properties)

    print("Current speed: {}".format(properties['settings']['speed']))

    time.sleep(5)
