"""Load optional legacy entity ID mappings for GREE Controller.""" from __future__ import annotations import json from pathlib import Path from typing import Any from homeassistant.core import HomeAssistant from .const import ENTITY_MAP_FILE def _load(path: Path) -> dict[str, str]: if not path.exists(): return {} with path.open("r", encoding="utf-8") as handle: data: Any = json.load(handle) items = data.get("entities", []) if isinstance(data, dict) else [] result: dict[str, str] = {} for item in items: if not isinstance(item, dict): continue device_id = str(item.get("device_id", "")).strip() entity_id = str(item.get("entity_id", "")).strip() if device_id and entity_id.startswith("climate."): result[device_id] = entity_id return result async def async_load_entity_map(hass: HomeAssistant) -> dict[str, str]: """Load the optional mapping file without blocking Home Assistant's loop.""" path = Path(hass.config.path(ENTITY_MAP_FILE)) return await hass.async_add_executor_job(_load, path)