import { formatValue } from "./format-value"; export type LocalizedFeatureProperty = { key: string; label: string; value: string; }; const PROPERTY_LABELS: Record = { id: "编号", gid: "要素编号", name: "名称", code: "编码", type: "类型", node1: "起点节点", node2: "终点节点", from_node: "起点节点", to_node: "终点节点", diameter: "管径", dn: "管径", length: "长度", roughness: "粗糙系数", status: "状态", material: "材质", elevation: "高程", demand: "需水量", pressure: "压力", flow: "流量", velocity: "流速", zone: "分区", district: "片区", source: "来源", updated_at: "更新时间" }; const PROPERTY_ORDER: Record = { id: 10, gid: 11, name: 12, code: 13, diameter: 20, dn: 20, length: 21, roughness: 22, material: 23, node1: 24, from_node: 24, node2: 25, to_node: 25, elevation: 30, demand: 31, pressure: 32, flow: 33, velocity: 34, status: 90 }; const STATUS_LABELS: Record = { active: "运行中", inactive: "停用", online: "在线", offline: "离线", open: "开启", closed: "关闭", normal: "正常", warning: "告警", critical: "严重" }; export function getLocalizedFeatureProperties(properties: Record): LocalizedFeatureProperty[] { return Object.entries(properties).map(([key, value]) => ({ key, label: getFeaturePropertyLabel(key), value: formatFeaturePropertyValue(key, value) })).sort((first, second) => getPropertyOrder(first.key) - getPropertyOrder(second.key)); } export function getFeaturePropertyLabel(key: string) { const normalizedKey = normalizePropertyKey(key); return PROPERTY_LABELS[normalizedKey] ?? key; } export function formatFeaturePropertyValue(key: string, value: unknown) { const normalizedKey = normalizePropertyKey(key); if (isStatusKey(key) && typeof value === "string") { return STATUS_LABELS[value.toLowerCase()] ?? value; } if ((normalizedKey === "diameter" || normalizedKey === "dn") && value !== null && value !== undefined && value !== "") { return `DN${formatValue(value)}`; } if ((normalizedKey === "length" || normalizedKey === "elevation") && value !== null && value !== undefined && value !== "") { return `${formatValue(value)} m`; } return formatValue(value); } function getPropertyOrder(key: string) { return PROPERTY_ORDER[normalizePropertyKey(key)] ?? 100; } function normalizePropertyKey(key: string) { return key.trim().replaceAll("-", "_").toLowerCase(); } function isStatusKey(key: string) { return normalizePropertyKey(key) === "status"; }