"""The Raspberry Pi hardware platform."""
from __future__ import annotations

from homeassistant.components.hardware.models import BoardInfo, HardwareInfo
from homeassistant.components.hassio import get_os_info
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError

from .const import DOMAIN

BOARD_NAMES = {
    "rpi": "Raspberry Pi",
    "rpi0": "Raspberry Pi Zero",
    "rpi0-w": "Raspberry Pi Zero W",
    "rpi2": "Raspberry Pi 2",
    "rpi3": "Raspberry Pi 3 (32-bit)",
    "rpi3-64": "Raspberry Pi 3",
    "rpi4": "Raspberry Pi 4 (32-bit)",
    "rpi4-64": "Raspberry Pi 4",
}

MODELS = {
    "rpi": "1",
    "rpi0": "zero",
    "rpi0-w": "zero_w",
    "rpi2": "2",
    "rpi3": "3",
    "rpi3-64": "3",
    "rpi4": "4",
    "rpi4-64": "4",
}


@callback
def async_info(hass: HomeAssistant) -> HardwareInfo:
    """Return board info."""
    if (os_info := get_os_info(hass)) is None:
        raise HomeAssistantError
    board: str
    if (board := os_info.get("board")) is None:
        raise HomeAssistantError
    if not board.startswith("rpi"):
        raise HomeAssistantError

    return HardwareInfo(
        board=BoardInfo(
            hassio_board_id=board,
            manufacturer=DOMAIN,
            model=MODELS.get(board),
            revision=None,
        ),
        name=BOARD_NAMES.get(board, f"Unknown Raspberry Pi model '{board}'"),
        url=None,
    )
