class EdgeRegistryView { final String edgeId; final String edgeName; final String version; final List capabilities; final String protocol; final bool connected; final DateTime lastSeen; EdgeRegistryView({ required this.edgeId, required this.edgeName, required this.version, required this.capabilities, required this.protocol, required this.connected, required this.lastSeen, }); factory EdgeRegistryView.fromJson(Map json) { return EdgeRegistryView( edgeId: json['edge_id'] as String? ?? '', edgeName: json['edge_name'] as String? ?? '', version: json['version'] as String? ?? '', capabilities: List.from(json['capabilities'] ?? []), protocol: json['protocol'] as String? ?? '', connected: json['connected'] as bool? ?? false, lastSeen: json['last_seen'] != null ? DateTime.parse(json['last_seen'] as String) : DateTime.now(), ); } } class AdapterSummaryView { final String type; final bool enabled; AdapterSummaryView({required this.type, required this.enabled}); factory AdapterSummaryView.fromJson(Map json) { return AdapterSummaryView( type: json['type'] as String? ?? '', enabled: json['enabled'] as bool? ?? false, ); } } class NodeConfigSummaryView { final List adapters; final int concurrency; NodeConfigSummaryView({required this.adapters, required this.concurrency}); factory NodeConfigSummaryView.fromJson(Map json) { return NodeConfigSummaryView( adapters: (json['adapters'] as List? ?? []) .map((e) => AdapterSummaryView.fromJson(e as Map)) .toList(), concurrency: json['concurrency'] as int? ?? 0, ); } } class ProviderSnapshotView { final String id; final String adapter; final String type; final String category; final String status; final String health; final int capacity; final int inFlight; final int queued; final double loadRatio; final List servedModels; final List lifecycleCapabilities; ProviderSnapshotView({ required this.id, required this.adapter, required this.type, required this.category, required this.status, required this.health, required this.capacity, required this.inFlight, required this.queued, required this.loadRatio, required this.servedModels, required this.lifecycleCapabilities, }); factory ProviderSnapshotView.fromJson(Map json) { return ProviderSnapshotView( id: json['id'] as String? ?? '', adapter: json['adapter'] as String? ?? '', type: json['type'] as String? ?? '', category: json['category'] as String? ?? '', status: json['status'] as String? ?? '', health: json['health'] as String? ?? '', capacity: (json['capacity'] as num?)?.toInt() ?? 0, inFlight: (json['in_flight'] as num?)?.toInt() ?? 0, queued: (json['queued'] as num?)?.toInt() ?? 0, loadRatio: (json['load_ratio'] as num?)?.toDouble() ?? 0, servedModels: List.from(json['served_models'] ?? []), lifecycleCapabilities: List.from(json['lifecycle_capabilities'] ?? []), ); } } class EdgeNodeSnapshotView { final String nodeId; final String alias; final String label; final bool connected; final NodeConfigSummaryView? config; final List providerSnapshots; EdgeNodeSnapshotView({ required this.nodeId, required this.alias, required this.label, required this.connected, this.config, this.providerSnapshots = const [], }); factory EdgeNodeSnapshotView.fromJson(Map json) { return EdgeNodeSnapshotView( nodeId: json['node_id'] as String? ?? '', alias: json['alias'] as String? ?? '', label: json['label'] as String? ?? '', connected: json['connected'] as bool? ?? false, config: json['config'] != null ? NodeConfigSummaryView.fromJson(json['config'] as Map) : null, providerSnapshots: (json['provider_snapshots'] as List? ?? []) .map((e) => ProviderSnapshotView.fromJson(e as Map)) .toList(), ); } } class EdgeCapabilitySummaryView { final String kind; final bool available; final String status; final String summary; EdgeCapabilitySummaryView({ required this.kind, required this.available, required this.status, required this.summary, }); factory EdgeCapabilitySummaryView.fromJson(Map json) { return EdgeCapabilitySummaryView( kind: json['kind'] as String? ?? '', available: json['available'] as bool? ?? false, status: json['status'] as String? ?? '', summary: json['summary'] as String? ?? '', ); } } class EdgeDomainAgentSummaryView { final String agentKind; final bool available; final String lifecycleState; final String activeCommandId; final String summary; EdgeDomainAgentSummaryView({ required this.agentKind, required this.available, required this.lifecycleState, required this.activeCommandId, required this.summary, }); factory EdgeDomainAgentSummaryView.fromJson(Map json) { return EdgeDomainAgentSummaryView( agentKind: json['agent_kind'] as String? ?? '', available: json['available'] as bool? ?? false, lifecycleState: json['lifecycle_state'] as String? ?? '', activeCommandId: json['active_command_id'] as String? ?? '', summary: json['summary'] as String? ?? '', ); } } class EdgeStatusResponseView { final String requestId; final String edgeId; final String edgeName; final int observedTimeUnixNano; final List nodes; final List capabilities; final List domainAgents; final Map metadata; final String error; EdgeStatusResponseView({ required this.requestId, required this.edgeId, required this.edgeName, required this.observedTimeUnixNano, required this.nodes, required this.capabilities, required this.domainAgents, required this.metadata, required this.error, }); factory EdgeStatusResponseView.fromJson(Map json) { return EdgeStatusResponseView( requestId: json['request_id'] as String? ?? '', edgeId: json['edge_id'] as String? ?? '', edgeName: json['edge_name'] as String? ?? '', observedTimeUnixNano: json['observed_time_unix_nano'] as int? ?? 0, nodes: (json['nodes'] as List? ?? []) .map((e) => EdgeNodeSnapshotView.fromJson(e as Map)) .toList(), capabilities: (json['capabilities'] as List? ?? []) .map((e) => EdgeCapabilitySummaryView.fromJson(e as Map)) .toList(), domainAgents: (json['domain_agents'] as List? ?? []) .map((e) => EdgeDomainAgentSummaryView.fromJson(e as Map)) .toList(), metadata: Map.from(json['metadata'] ?? {}), error: json['error'] as String? ?? '', ); } } class EdgeNodeEventView { final String edgeId; final String eventId; final String type; final String source; final String nodeId; final String alias; final String reason; final DateTime timestamp; final DateTime receivedAt; final Map metadata; EdgeNodeEventView({ required this.edgeId, required this.eventId, required this.type, required this.source, required this.nodeId, required this.alias, required this.reason, required this.timestamp, required this.receivedAt, required this.metadata, }); factory EdgeNodeEventView.fromJson(Map json) { return EdgeNodeEventView( edgeId: json['edge_id'] as String? ?? '', eventId: json['event_id'] as String? ?? '', type: json['type'] as String? ?? '', source: json['source'] as String? ?? '', nodeId: json['node_id'] as String? ?? '', alias: json['alias'] as String? ?? '', reason: json['reason'] as String? ?? '', timestamp: json['timestamp'] != null ? DateTime.parse(json['timestamp'] as String) : DateTime.now(), receivedAt: json['received_at'] != null ? DateTime.parse(json['received_at'] as String) : DateTime.now(), metadata: Map.from(json['metadata'] ?? {}), ); } } class FleetEdgeView { final String edgeId; final String edgeName; final String version; final String protocol; final bool connected; final String health; final DateTime lastSeen; final int nodeCount; final List capabilities; final List domainAgents; final String error; FleetEdgeView({ required this.edgeId, required this.edgeName, required this.version, required this.protocol, required this.connected, required this.health, required this.lastSeen, required this.nodeCount, required this.capabilities, required this.domainAgents, required this.error, }); factory FleetEdgeView.fromJson(Map json) { return FleetEdgeView( edgeId: json['edge_id'] as String? ?? '', edgeName: json['edge_name'] as String? ?? '', version: json['version'] as String? ?? '', protocol: json['protocol'] as String? ?? '', connected: json['connected'] as bool? ?? false, health: json['health'] as String? ?? '', lastSeen: json['last_seen'] != null ? DateTime.parse(json['last_seen'] as String) : DateTime.now(), nodeCount: json['node_count'] as int? ?? 0, capabilities: (json['capabilities'] as List? ?? []) .map((e) => EdgeCapabilitySummaryView.fromJson(e as Map)) .toList(), domainAgents: (json['domain_agents'] as List? ?? []) .map((e) => EdgeDomainAgentSummaryView.fromJson(e as Map)) .toList(), error: json['error'] as String? ?? '', ); } } class FleetStatusResponseView { final DateTime generatedAt; final List edges; FleetStatusResponseView({ required this.generatedAt, required this.edges, }); factory FleetStatusResponseView.fromJson(Map json) { return FleetStatusResponseView( generatedAt: json['generated_at'] != null ? DateTime.parse(json['generated_at'] as String) : DateTime.now(), edges: (json['edges'] as List? ?? []) .map((e) => FleetEdgeView.fromJson(e as Map)) .toList(), ); } } class EdgeCommandRecordView { final String edgeId; final String commandId; final String operation; final String targetSelector; final String status; final String summary; final String error; EdgeCommandRecordView({ required this.edgeId, required this.commandId, required this.operation, required this.targetSelector, required this.status, required this.summary, required this.error, }); factory EdgeCommandRecordView.fromJson(Map json) { return EdgeCommandRecordView( edgeId: json['edge_id'] as String? ?? '', commandId: json['command_id'] as String? ?? '', operation: json['operation'] as String? ?? '', targetSelector: json['target_selector'] as String? ?? '', status: json['status'] as String? ?? '', summary: json['summary'] as String? ?? '', error: json['error'] as String? ?? '', ); } } class EdgeOperationsResponseView { final String edgeId; final List operations; EdgeOperationsResponseView({ required this.edgeId, required this.operations, }); factory EdgeOperationsResponseView.fromJson(Map json) { return EdgeOperationsResponseView( edgeId: json['edge_id'] as String? ?? '', operations: (json['operations'] as List? ?? []) .map((e) => EdgeCommandRecordView.fromJson(e as Map)) .toList(), ); } } class EdgeCommandResponseView { final String requestId; final String commandId; final String edgeId; final String status; final String summary; final String error; EdgeCommandResponseView({ required this.requestId, required this.commandId, required this.edgeId, required this.status, required this.summary, required this.error, }); factory EdgeCommandResponseView.fromJson(Map json) { return EdgeCommandResponseView( requestId: json['request_id'] as String? ?? '', commandId: json['command_id'] as String? ?? '', edgeId: json['edge_id'] as String? ?? '', status: json['status'] as String? ?? '', summary: json['summary'] as String? ?? '', error: json['error'] as String? ?? '', ); } }