"""Test Wyoming devices."""

from homeassistant.components.assist_pipeline import OPTION_PREFERRED
from homeassistant.components.wyoming import DOMAIN
from homeassistant.components.wyoming.devices import SatelliteDevice
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import STATE_OFF
from homeassistant.core import HomeAssistant
from homeassistant.helpers import area_registry as ar, device_registry as dr


async def test_device_registry_info(
    hass: HomeAssistant,
    satellite_device: SatelliteDevice,
    satellite_config_entry: ConfigEntry,
    area_registry: ar.AreaRegistry,
    device_registry: dr.DeviceRegistry,
) -> None:
    """Test info in device registry."""

    # Satellite uses config entry id since only one satellite per entry is
    # supported.
    device = device_registry.async_get_device(
        identifiers={(DOMAIN, satellite_config_entry.entry_id)}
    )
    assert device is not None
    assert device.name == "Test Satellite"
    assert device.area_id == area_registry.async_get_area_by_name("Office").id

    # Check associated entities
    assist_in_progress_id = satellite_device.get_assist_in_progress_entity_id(hass)
    assert assist_in_progress_id
    assist_in_progress_state = hass.states.get(assist_in_progress_id)
    # assist_in_progress binary sensor is disabled
    assert assist_in_progress_state is None

    muted_id = satellite_device.get_muted_entity_id(hass)
    assert muted_id
    muted_state = hass.states.get(muted_id)
    assert muted_state is not None
    assert muted_state.state == STATE_OFF

    pipeline_entity_id = satellite_device.get_pipeline_entity_id(hass)
    assert pipeline_entity_id
    pipeline_state = hass.states.get(pipeline_entity_id)
    assert pipeline_state is not None
    assert pipeline_state.state == OPTION_PREFERRED


async def test_remove_device_registry_entry(
    hass: HomeAssistant,
    satellite_device: SatelliteDevice,
    device_registry: dr.DeviceRegistry,
) -> None:
    """Test removing a device registry entry."""

    # Check associated entities
    assist_in_progress_id = satellite_device.get_assist_in_progress_entity_id(hass)
    assert assist_in_progress_id
    # assist_in_progress binary sensor is disabled
    assert hass.states.get(assist_in_progress_id) is None

    muted_id = satellite_device.get_muted_entity_id(hass)
    assert muted_id
    assert hass.states.get(muted_id) is not None

    pipeline_entity_id = satellite_device.get_pipeline_entity_id(hass)
    assert pipeline_entity_id
    assert hass.states.get(pipeline_entity_id) is not None

    # Remove
    device_registry.async_remove_device(satellite_device.device_id)
    await hass.async_block_till_done()
    await hass.async_block_till_done()

    # Everything should be gone
    assert hass.states.get(assist_in_progress_id) is None
    assert hass.states.get(muted_id) is None
    assert hass.states.get(pipeline_entity_id) is None
