"""Define fixtures available for all tests."""

from collections.abc import Generator
from unittest.mock import MagicMock, patch

from canary.api import Api
import pytest

from homeassistant.core import HomeAssistant


@pytest.fixture(autouse=True)
def mock_ffmpeg(hass: HomeAssistant) -> None:
    """Mock ffmpeg is loaded."""
    hass.config.components.add("ffmpeg")


@pytest.fixture
def canary() -> Generator[MagicMock]:
    """Mock the CanaryApi for easier testing."""
    with (
        patch.object(Api, "login", return_value=True),
        patch("homeassistant.components.canary.Api") as mock_canary,
    ):
        instance = mock_canary.return_value = Api(
            "test-username",
            "test-password",
            1,
        )

        instance.login = MagicMock(return_value=True)
        instance.get_entries = MagicMock(return_value=[])
        instance.get_locations = MagicMock(return_value=[])
        instance.get_location = MagicMock(return_value=None)
        instance.get_modes = MagicMock(return_value=[])
        instance.get_readings = MagicMock(return_value=[])
        instance.get_latest_readings = MagicMock(return_value=[])
        instance.set_location_mode = MagicMock(return_value=None)

        yield mock_canary


@pytest.fixture
def canary_config_flow() -> Generator[MagicMock]:
    """Mock the CanaryApi for easier config flow testing."""
    with (
        patch.object(Api, "login", return_value=True),
        patch("homeassistant.components.canary.config_flow.Api") as mock_canary,
    ):
        instance = mock_canary.return_value = Api(
            "test-username",
            "test-password",
            1,
        )

        instance.login = MagicMock(return_value=True)
        instance.get_entries = MagicMock(return_value=[])
        instance.get_locations = MagicMock(return_value=[])
        instance.get_location = MagicMock(return_value=None)
        instance.get_modes = MagicMock(return_value=[])
        instance.get_readings = MagicMock(return_value=[])
        instance.get_latest_readings = MagicMock(return_value=[])
        instance.set_location_mode = MagicMock(return_value=None)

        yield mock_canary