"""Test the Fibaro scene platform."""

from unittest.mock import Mock

from homeassistant.components.scene import DOMAIN as SCENE_DOMAIN
from homeassistant.const import ATTR_ENTITY_ID, SERVICE_TURN_ON
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er

from .conftest import init_integration

from tests.common import MockConfigEntry


async def test_entity_attributes(
    hass: HomeAssistant,
    entity_registry: er.EntityRegistry,
    mock_fibaro_client: Mock,
    mock_config_entry: MockConfigEntry,
    mock_scene: Mock,
    mock_room: Mock,
) -> None:
    """Test that the attributes of the entity are correct."""
    # Arrange
    mock_fibaro_client.read_rooms.return_value = [mock_room]
    mock_fibaro_client.read_scenes.return_value = [mock_scene]
    # Act
    await init_integration(hass, mock_config_entry)
    # Assert
    entry = entity_registry.async_get("scene.room_1_test_scene")

    assert entry
    assert entry.unique_id == "hc2_111111.scene.1"
    assert entry.original_name == "Room 1 Test scene"


async def test_entity_attributes_without_room(
    hass: HomeAssistant,
    entity_registry: er.EntityRegistry,
    mock_fibaro_client: Mock,
    mock_config_entry: MockConfigEntry,
    mock_scene: Mock,
    mock_room: Mock,
) -> None:
    """Test that the attributes of the entity are correct."""
    # Arrange
    mock_room.name = None
    mock_fibaro_client.read_rooms.return_value = [mock_room]
    mock_fibaro_client.read_scenes.return_value = [mock_scene]
    # Act
    await init_integration(hass, mock_config_entry)
    # Assert
    entry = entity_registry.async_get("scene.unknown_test_scene")

    assert entry
    assert entry.unique_id == "hc2_111111.scene.1"


async def test_activate_scene(
    hass: HomeAssistant,
    mock_fibaro_client: Mock,
    mock_config_entry: MockConfigEntry,
    mock_scene: Mock,
    mock_room: Mock,
) -> None:
    """Test activate scene is called."""
    # Arrange
    mock_fibaro_client.read_rooms.return_value = [mock_room]
    mock_fibaro_client.read_scenes.return_value = [mock_scene]
    # Act
    await init_integration(hass, mock_config_entry)
    # Act
    await hass.services.async_call(
        SCENE_DOMAIN,
        SERVICE_TURN_ON,
        {ATTR_ENTITY_ID: "scene.room_1_test_scene"},
        blocking=True,
    )
    # Assert
    assert mock_scene.start.call_count == 1
