import { expect, tap } from '@git.zone/tstest/tapbundle';
import { createKnxDiscoveryDescriptor } from '../../ts/integrations/knx/index.js';

tap.test('matches KNXnet/IP gateway descriptors', async () => {
  const descriptor = createKnxDiscoveryDescriptor();
  const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'knx-gateway-descriptor-match');
  const result = await matcher!.matches({
    ip_addr: '192.168.1.50',
    port: 3671,
    name: 'MDT SCN-IP000.03',
    individual_address: '1.1.1',
    supports_tunnelling: true,
    supports_tunnelling_tcp: true,
    supports_routing: true,
  }, {});
  expect(result.matched).toBeTrue();
  expect(result.candidate?.integrationDomain).toEqual('knx');
  expect(result.candidate?.metadata?.connectionType).toEqual('tunneling_tcp');
});

tap.test('matches manual KNX/IP entries', async () => {
  const descriptor = createKnxDiscoveryDescriptor();
  const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'knx-manual-match');
  const result = await matcher!.matches({
    host: '192.168.1.51',
    connectionType: 'tunneling',
    individualAddress: '0.0.240',
  }, {});
  expect(result.matched).toBeTrue();
  expect(result.candidate?.host).toEqual('192.168.1.51');
  expect(result.candidate?.port).toEqual(3671);
});

export default tap.start();
