using System; using System.Collections.Generic; namespace Learn.Models; public class TreeNode(Item item) { public class KeyValueInfo { public string Key { get; set; } public string Value { get; set; } public bool IsInherited { get; set; } } public TreeNode Parent => _parent; public IEnumerable Children => _children; public Item Info => item; private TreeNode _parent; private readonly List _children = new(); public void AddNode(TreeNode node) { if (_children.Contains(node)) return; _children.Add(node); node._parent = this; } public IEnumerable GetKeyValueInfos() { var result = new List(); var keys = new HashSet(); var curr = this; while (curr.Info != null) { foreach (var kv in curr.Info.Info) { if(!keys.Add(kv.Key)) continue; var keyValueInfo = new KeyValueInfo(); if (curr != this) { keyValueInfo.IsInherited = true; } keyValueInfo.Key = kv.Key; keyValueInfo.Value = kv.Value; result.Add(keyValueInfo); } curr = curr.Parent; } return result; } }