"""The tests for the utility_meter select platform."""

from homeassistant.components.utility_meter.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.setup import async_setup_component

from tests.common import MockConfigEntry


async def test_select_entity_name_config_entry(
    hass: HomeAssistant,
) -> None:
    """Test for Utility Meter select platform."""

    config_entry_config = {
        "cycle": "none",
        "delta_values": False,
        "name": "Energy bill",
        "net_consumption": False,
        "offset": 0,
        "periodically_resetting": True,
        "source": "sensor.energy",
        "tariffs": ["peak", "offpeak"],
    }

    source_config_entry = MockConfigEntry()
    source_config_entry.add_to_hass(hass)
    utility_meter_config_entry = MockConfigEntry(
        data={},
        domain=DOMAIN,
        options=config_entry_config,
        title=config_entry_config["name"],
    )

    utility_meter_config_entry.add_to_hass(hass)

    assert await hass.config_entries.async_setup(utility_meter_config_entry.entry_id)

    await hass.async_block_till_done()

    state = hass.states.get("select.energy_bill")
    assert state is not None
    assert state.attributes.get("friendly_name") == "Energy bill"


async def test_select_entity_name_yaml(
    hass: HomeAssistant,
) -> None:
    """Test for Utility Meter select platform."""

    yaml_config = {
        "utility_meter": {
            "energy_bill": {
                "name": "Energy bill",
                "source": "sensor.energy",
                "tariffs": ["peak", "offpeak"],
                "unique_id": "1234abcd",
            }
        }
    }

    assert await async_setup_component(hass, DOMAIN, yaml_config)

    await hass.async_block_till_done()

    state = hass.states.get("select.energy_bill")
    assert state is not None
    assert state.attributes.get("friendly_name") == "Energy bill"


async def test_device_id(
    hass: HomeAssistant,
    device_registry: dr.DeviceRegistry,
    entity_registry: er.EntityRegistry,
) -> None:
    """Test for source entity device for Utility Meter."""
    source_config_entry = MockConfigEntry()
    source_config_entry.add_to_hass(hass)
    source_device_entry = device_registry.async_get_or_create(
        config_entry_id=source_config_entry.entry_id,
        identifiers={("sensor", "identifier_test")},
        connections={("mac", "30:31:32:33:34:35")},
    )
    source_entity = entity_registry.async_get_or_create(
        "sensor",
        "test",
        "source",
        config_entry=source_config_entry,
        device_id=source_device_entry.id,
    )
    await hass.async_block_till_done()
    assert entity_registry.async_get("sensor.test_source") is not None

    utility_meter_config_entry = MockConfigEntry(
        data={},
        domain=DOMAIN,
        options={
            "cycle": "monthly",
            "delta_values": False,
            "name": "Energy",
            "net_consumption": False,
            "offset": 0,
            "periodically_resetting": True,
            "source": "sensor.test_source",
            "tariffs": ["peak", "offpeak"],
        },
        title="Energy",
    )

    utility_meter_config_entry.add_to_hass(hass)

    assert await hass.config_entries.async_setup(utility_meter_config_entry.entry_id)
    await hass.async_block_till_done()

    utility_meter_entity_select = entity_registry.async_get("select.energy")
    assert utility_meter_entity_select is not None
    assert utility_meter_entity_select.device_id == source_entity.device_id