import 'package:client_proxy_framework/client_proxy_framework.dart'; /// 从 `common_info.extConfig`([ExtConfigRuntime])与 `skin_config.extConfig.defaults` 解析文档类 URL。 /// 用于用户协议、隐私政策及后续其他 H5 页面。 abstract final class ExtConfigDocumentUrls { ExtConfigDocumentUrls._(); /// 用户协议(wire 键由 skin 的 `agreementUrl` → `agreement` 等映射)。 static String? get agreementUrl => _resolve((d) => d.agreementUrl); /// 隐私政策(wire 键由 skin 的 `privacyUrl` → `privacy` 等映射)。 static String? get privacyUrl => _resolve((d) => d.privacyUrl); /// 通用:优先 [ExtConfigRuntime.data],再回退到换皮默认 [AppConfig.extConfigDefaults]。 static String? resolve(String? Function(ExtConfigData d) pick) => _resolve(pick); static String? _resolve(String? Function(ExtConfigData d) pick) { final runtime = ExtConfigRuntime.data.value; if (runtime != null) { final u = pick(runtime)?.trim(); if (u != null && u.isNotEmpty) return u; } final skin = _fromSkinDefaults(); if (skin != null) { final u = pick(skin)?.trim(); if (u != null && u.isNotEmpty) return u; } return null; } static ExtConfigData? _fromSkinDefaults() { final cfg = ApiClient.instance.config; final raw = cfg.extConfigDefaults; final schema = cfg.extConfigKeySchema; if (raw == null || raw.isEmpty) return null; try { return ExtConfigData.fromJson( Map.from(raw), schema: schema, fieldMapping: cfg.fieldMapping, ); } catch (_) { return null; } } }