"""Fixtures for the trend component tests."""

from collections.abc import Awaitable, Callable
from typing import Any

import pytest

from homeassistant.components.trend.const import DOMAIN
from homeassistant.core import HomeAssistant

from tests.common import MockConfigEntry

type ComponentSetup = Callable[[dict[str, Any]], Awaitable[None]]


@pytest.fixture(name="config_entry")
async def mock_config_entry(hass: HomeAssistant) -> MockConfigEntry:
    """Return a MockConfigEntry for testing."""
    return MockConfigEntry(
        data={},
        domain=DOMAIN,
        options={
            "name": "My trend",
            "entity_id": "sensor.cpu_temp",
            "invert": False,
            "max_samples": 2.0,
            "min_gradient": 0.0,
            "sample_duration": 0.0,
        },
        title="My trend",
    )


@pytest.fixture(name="setup_component")
async def mock_setup_component(
    hass: HomeAssistant, config_entry: MockConfigEntry
) -> ComponentSetup:
    """Set up the trend component."""

    async def _setup_func(component_params: dict[str, Any]) -> None:
        config_entry.add_to_hass(hass)
        hass.config_entries.async_update_entry(
            config_entry,
            options={
                **config_entry.options,
                **component_params,
                "name": "test_trend_sensor",
                "entity_id": "sensor.test_state",
            },
            title="test_trend_sensor",
        )
        assert await hass.config_entries.async_setup(config_entry.entry_id)
        await hass.async_block_till_done()

    return _setup_func
