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

from unittest.mock import patch

import pytest
from surepy import MESTART_RESOURCE

from homeassistant.components.surepetcare.const import DOMAIN
from homeassistant.const import CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME
from homeassistant.core import HomeAssistant

from . import MOCK_API_DATA

from tests.common import MockConfigEntry


async def _mock_call(method, resource):
    if method == "GET" and resource == MESTART_RESOURCE:
        return {"data": MOCK_API_DATA}
    return None


@pytest.fixture
async def surepetcare():
    """Mock the SurePetcare for easier testing."""
    with patch("surepy.SureAPIClient", autospec=True) as mock_client_class:
        client = mock_client_class.return_value
        client.resources = {}
        client.call = _mock_call
        client.get_token.return_value = "token"
        yield client


@pytest.fixture
async def mock_config_entry_setup(hass: HomeAssistant) -> MockConfigEntry:
    """Help setting up a mocked config entry."""
    data = {
        CONF_USERNAME: "test-username",
        CONF_PASSWORD: "test-password",
        CONF_TOKEN: "token",
        "feeders": [12345],
        "flaps": [13579, 13576],
        "pets": [24680],
    }
    entry = MockConfigEntry(domain=DOMAIN, data=data)
    entry.add_to_hass(hass)
    assert await hass.config_entries.async_setup(entry.entry_id)
    return entry
