import type { Map as MapLibreMap } from "maplibre-gl"; export const SUPPLY_ASSET_IMAGE_IDS = { valve: "supply-valve", reservoir: "supply-reservoir", pump: "supply-pump", tank: "supply-tank" } as const; export const SUPPLY_ASSET_ICON_PATHS = { valve: "/map/valve.png", reservoir: "/map/reservoir.png", pump: "/map/pump.png", tank: "/map/tank.png" } as const; export const SUPPLY_ASSET_MAP_ICON_PATHS = SUPPLY_ASSET_ICON_PATHS; export type SupplyAssetImageRegistrationResult = { status: "ready" | "degraded"; failedImageIds: string[]; }; const ACTIVE_SUPPLY_ASSET_ICON_KEYS = ["valve", "reservoir", "pump", "tank"] as const; export async function registerSupplyAssetImages( map: Pick ): Promise { const failedImageIds: string[] = []; for (const key of ACTIVE_SUPPLY_ASSET_ICON_KEYS) { const imageId = SUPPLY_ASSET_IMAGE_IDS[key]; if (map.hasImage(imageId)) continue; try { const image = await loadImage(map, SUPPLY_ASSET_MAP_ICON_PATHS[key]); addImageIfMissing(map, imageId, image); } catch { failedImageIds.push(imageId); } } return { status: failedImageIds.length > 0 ? "degraded" : "ready", failedImageIds }; } async function loadImage(map: Pick, path: string) { const response = await map.loadImage(path); return response.data; } function addImageIfMissing( map: Pick, imageId: string, image: Awaited> ) { if (!map.hasImage(imageId)) map.addImage(imageId, image, { pixelRatio: 2 }); }