"""Utility to setup the Insteon integration."""

from homeassistant.components.insteon.api import async_load_api
from homeassistant.components.insteon.const import DOMAIN
from homeassistant.components.usb import DOMAIN as USB_DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.setup import async_setup_component

from .const import MOCK_USER_INPUT_PLM
from .mock_devices import MockDevices

from tests.common import MockConfigEntry
from tests.typing import WebSocketGenerator


async def async_mock_setup(
    hass: HomeAssistant,
    hass_ws_client: WebSocketGenerator,
    config_data: dict | None = None,
    config_options: dict | None = None,
):
    """Set up for tests."""
    assert await async_setup_component(hass, USB_DOMAIN, {"usb": {}})

    config_data = MOCK_USER_INPUT_PLM if config_data is None else config_data
    config_options = {} if config_options is None else config_options
    config_entry = MockConfigEntry(
        domain=DOMAIN,
        entry_id="abcde12345",
        data=config_data,
        options=config_options,
    )
    config_entry.add_to_hass(hass)
    async_load_api(hass)

    ws_client = await hass_ws_client(hass)
    devices = MockDevices()
    await devices.async_load()

    dev_reg = dr.async_get(hass)
    # Create device registry entry for mock node
    ha_device = dev_reg.async_get_or_create(
        config_entry_id=config_entry.entry_id,
        identifiers={(DOMAIN, "11.11.11")},
        name="Device 11.11.11",
    )
    return ws_client, devices, ha_device, dev_reg
