"""Tests for the Tankerkoening integration."""
from __future__ import annotations

from unittest.mock import patch

from syrupy import SnapshotAssertion

from homeassistant.components.tankerkoenig.const import (
    CONF_FUEL_TYPES,
    CONF_STATIONS,
    DOMAIN,
)
from homeassistant.const import (
    CONF_API_KEY,
    CONF_LATITUDE,
    CONF_LOCATION,
    CONF_LONGITUDE,
    CONF_NAME,
    CONF_RADIUS,
    CONF_SHOW_ON_MAP,
)
from homeassistant.core import HomeAssistant

from tests.common import MockConfigEntry
from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator

MOCK_USER_DATA = {
    CONF_NAME: "Home",
    CONF_API_KEY: "269534f6-xxxx-xxxx-xxxx-yyyyzzzzxxxx",
    CONF_FUEL_TYPES: ["e5"],
    CONF_LOCATION: {CONF_LATITUDE: 51.0, CONF_LONGITUDE: 13.0},
    CONF_RADIUS: 2.0,
    CONF_STATIONS: [
        "3bcd61da-xxxx-xxxx-xxxx-19d5523a7ae8",
    ],
}
MOCK_OPTIONS = {
    CONF_SHOW_ON_MAP: True,
}

MOCK_STATION_DATA = {
    "ok": True,
    "station": {
        "id": "3bcd61da-xxxx-xxxx-xxxx-19d5523a7ae8",
        "name": "Station ABC",
        "brand": "Station",
        "street": "Somewhere Street",
        "houseNumber": "1",
        "postCode": "01234",
        "place": "Somewhere",
        "openingTimes": [],
        "overrides": [],
        "wholeDay": True,
        "isOpen": True,
        "e5": 1.719,
        "e10": 1.659,
        "diesel": 1.659,
        "lat": 51.1,
        "lng": 13.1,
        "state": "xxXX",
    },
}
MOCK_STATION_PRICES = {
    "ok": True,
    "prices": {
        "3bcd61da-xxxx-xxxx-xxxx-19d5523a7ae8": {
            "status": "open",
            "e5": 1.719,
            "e10": 1.659,
            "diesel": 1.659,
        },
    },
}


async def test_entry_diagnostics(
    hass: HomeAssistant,
    hass_client: ClientSessionGenerator,
    snapshot: SnapshotAssertion,
) -> None:
    """Test config entry diagnostics."""
    with patch(
        "homeassistant.components.tankerkoenig.coordinator.pytankerkoenig.getStationData",
        return_value=MOCK_STATION_DATA,
    ), patch(
        "homeassistant.components.tankerkoenig.coordinator.pytankerkoenig.getPriceList",
        return_value=MOCK_STATION_PRICES,
    ):
        entry = MockConfigEntry(
            domain=DOMAIN,
            data=MOCK_USER_DATA,
            options=MOCK_OPTIONS,
            unique_id="mock.tankerkoenig",
            entry_id="8036b4412f2fae6bb9dbab7fe8e37f87",
        )
        entry.add_to_hass(hass)
        await hass.config_entries.async_setup(entry.entry_id)
        await hass.async_block_till_done()

    result = await get_diagnostics_for_config_entry(hass, hass_client, entry)

    assert result == snapshot