"""Diagnostics support for La Marzocco."""

from __future__ import annotations

from dataclasses import asdict
from typing import Any, TypedDict

from lmcloud.const import FirmwareType

from homeassistant.components.diagnostics import async_redact_data
from homeassistant.core import HomeAssistant

from . import LaMarzoccoConfigEntry

TO_REDACT = {
    "serial_number",
}


class DiagnosticsData(TypedDict):
    """Diagnostic data for La Marzocco."""

    model: str
    config: dict[str, Any]
    firmware: list[dict[FirmwareType, dict[str, Any]]]
    statistics: dict[str, Any]


async def async_get_config_entry_diagnostics(
    hass: HomeAssistant,
    entry: LaMarzoccoConfigEntry,
) -> dict[str, Any]:
    """Return diagnostics for a config entry."""
    coordinator = entry.runtime_data
    device = coordinator.device
    # collect all data sources
    diagnostics_data = DiagnosticsData(
        model=device.model,
        config=asdict(device.config),
        firmware=[{key: asdict(firmware)} for key, firmware in device.firmware.items()],
        statistics=asdict(device.statistics),
    )

    return async_redact_data(diagnostics_data, TO_REDACT)
