"""Diagnostics support for Whirlpool."""

from typing import Any

from whirlpool.appliance import Appliance

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

from . import WhirlpoolConfigEntry

TO_REDACT = {
    "SERIAL_NUMBER",
    "macaddress",
    "username",
    "password",
    "token",
    "unique_id",
    "SAID",
}


async def async_get_config_entry_diagnostics(
    hass: HomeAssistant,
    config_entry: WhirlpoolConfigEntry,
) -> dict[str, Any]:
    """Return diagnostics for a config entry."""

    def get_appliance_diagnostics(appliance: Appliance) -> dict[str, Any]:
        return {
            "data_model": appliance.appliance_info.data_model,
            "category": appliance.appliance_info.category,
            "model_number": appliance.appliance_info.model_number,
        }

    appliances_manager = config_entry.runtime_data
    diagnostics_data = {
        "washers": {
            washer.name: get_appliance_diagnostics(washer)
            for washer in appliances_manager.washers
        },
        "dryers": {
            dryer.name: get_appliance_diagnostics(dryer)
            for dryer in appliances_manager.dryers
        },
        "aircons": {
            ac.name: get_appliance_diagnostics(ac) for ac in appliances_manager.aircons
        },
        "ovens": {
            oven.name: get_appliance_diagnostics(oven)
            for oven in appliances_manager.ovens
        },
        "refrigerators": {
            refrigerator.name: get_appliance_diagnostics(refrigerator)
            for refrigerator in appliances_manager.refrigerators
        },
    }

    return {
        "config_entry": async_redact_data(config_entry.as_dict(), TO_REDACT),
        "appliances": async_redact_data(diagnostics_data, TO_REDACT),
    }
