# TODO

- Look into pointing xsdata to a module to parse objects
  - <https://xsdata.readthedocs.io/en/latest/models.html#type-wildcard>
- Consider moving system objects to a top-level "models" module
- Consider grouping like-objects into a single file, eg all stations into station.py
- Consider grouped controllers like aiohue, eg. for sensors, loads, etc.
- Consider renaming config_client/methods to config_client/interfaces and flattening
- Consider renaming GMemController to VariablesController, MastersController to ControllersController
- Consider retiring xml_dataclass.py in favor of pure dataclasses
- Sphinx docs / readthedocs
- Smarter fetching of objects?
  - Eg. combine multiple requests into one
  - Eg. If we request 50 and get < 50 don't make another request
- Consider "ctypes" style rpc for command_client INVOKE methods
  - Potentially move calls back into controllers

    ```python
    # argtypes, restype, "byref"
    # INVOKE {vid} {method} {args}
    # -> R:INVOKE {vid} {return} {method} {args}
    INVOKE_METHODS = {
        "Load.GetLevel": ((), Decimal),
        "Load.SetLevel": ((float,), bool),
        "Load.Ramp": ((float, float), bool),
        "Temperature.GetValue": ((), Decimal),
    }
    ```
