"""
Inscoper API Example Script: Device Management
==============================================
This script demonstrates how to retrieve and control device descriptions and statuses.

Configuration Prerequisites:
---------------------------
1. Environment Variable: Ensure 'InscoperConfigsPath' is defined in your environment
   and points to your Inscoper configurations folder.
2. Configuration Name: This script assumes a hardware configuration named "singleCamera".
   If your configuration name is different, change it in the my_bridge.loadConfigFile line.
3. Device Names: Change target camera names (e.g., "Camera") to match your setup.
"""

# --8<-- [start:main_logic]

import inscoper_api
import os

CONFIG_PATH = os.environ['InscoperConfigsPath']

my_bridge = inscoper_api.Bridge()
my_bridge.loadConfigFile(os.sep.join([CONFIG_PATH, "singleCamera"]))

devices = my_bridge.getLoadedDevices()
print("Loaded devices: ", my_bridge.getLoadedDevices())

print(my_bridge.getInitializedDevices())

# Initialize all the devices that were loaded from the configuration file
my_bridge.initDevices()
print(my_bridge.getInitializedDevices())
print([sd.getDeviceId()+"-"+sd.getSubDeviceId() for sd in my_bridge.getInitializedSubDeviceIds()])

# Close a device and check it is not anymore in the initialized list
my_bridge.closeDevice("Camera")
print(my_bridge.getInitializedDevices())

# Re-init a device
my_bridge.initDevice("Camera")
print(my_bridge.getInitializedDevices())

# Get a description of all devices
descriptions = my_bridge.getDeviceDescriptionList()
print([d.getDescription() for d in descriptions])
print([d.getBrand() for d in descriptions])
print([d.getModel() for d in descriptions])

my_bridge.close()

# --8<-- [end:main_logic]
