"""Diagnostics support for devolo Home Control."""
from __future__ import annotations

from typing import Any

from devolo_home_control_api.homecontrol import HomeControl

from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant

from .const import DOMAIN

TO_REDACT = {CONF_PASSWORD, CONF_USERNAME}


async def async_get_config_entry_diagnostics(
    hass: HomeAssistant, entry: ConfigEntry
) -> dict[str, Any]:
    """Return diagnostics for a config entry."""
    gateways: list[HomeControl] = hass.data[DOMAIN][entry.entry_id]["gateways"]

    device_info = []
    for gateway in gateways:
        device_info.append(
            {
                "gateway": {
                    "local_connection": gateway.gateway.local_connection,
                    "firmware_version": gateway.gateway.firmware_version,
                },
                "devices": [
                    {
                        "device_id": device_id,
                        "device_model_uid": properties.device_model_uid,
                        "device_type": properties.device_type,
                        "name": properties.name,
                    }
                    for device_id, properties in gateway.devices.items()
                ],
            }
        )

    diag_data = {
        "entry": async_redact_data(entry.as_dict(), TO_REDACT),
        "device_info": device_info,
    }

    return diag_data