"""Find matching devices for the supplied dp list"""

import json
import sys

from custom_components.tuya_local.helpers.device_config import (
    TuyaDeviceConfig,
    _typematch,
)


class FakeDevice:
    def __init__(self, dps):
        self._dps = dps

    def get_property(self, id):
        return self._dps.get(id)

    @property
    def name(self):
        return "cmdline"


def main() -> int:
    dps = json.loads(" ".join(sys.argv[2:]))
    device = FakeDevice(dps)
    config = TuyaDeviceConfig(sys.argv[1])
    print(f"{config.primary_entity.config_id}:")
    for dp in config.primary_entity.dps():
        if dp.id not in dps.keys():
            print(f"   {dp.name} missing from data")
            if not dp.optional:
                print(f">> dp {dp.id} is REQUIRED!!!!")
        elif not _typematch(dp.type, dps.get(dp.id)):
            print(
                f">> {dp.name} type MISMATCH, expected {dp.type.__name__}, got {dps.get(dp.id)}!!!"
            )
        else:
            values = dp.values(device)
            if values:
                values = f" from {values}"
            else:
                values = ""
            print(f"   {dp.name}: {dp.get_value(device)}{values}")
    for entity in config.secondary_entities():
        print(f"{entity.config_id}:")
        for dp in entity.dps():
            if dp.id not in dps.keys():
                print(f"   {dp.name} missing from data")
                if not dp.optional:
                    print(f">> dp {dp.id} is REQUIRED!!!!")
            elif not _typematch(dp.type, dps.get(dp.id)):
                print(
                    f">> {dp.name} type MISMATCH, expected {dp.type.__name__}, got {dps.get(dp.id)}!!!"
                )
            else:
                values = dp.values(device)
                if values:
                    values = f" from {values}"
                else:
                    values = ""
                print(f"   {dp.name}: {dp.get_value(device)}{values}")


if __name__ == "__main__":
    sys.exit(main())
