private FlightEnabledAbstractValue WithAdditionalEnabledFlightsCore(FlightEnabledAbstractValue newEnabledFlights)
        {
            Debug.Assert(Kind != FlightEnabledAbstractValueKind.Unknown);

            if (Kind != FlightEnabledAbstractValueKind.Known)
            {
                return(newEnabledFlights);
            }

            if (newEnabledFlights.Height == 0)
            {
                return(new FlightEnabledAbstractValue(
                           EnabledFlights.AddRange(newEnabledFlights.EnabledFlights), Parents, Height, FlightEnabledAbstractValueKind.Known));
            }

            return(newEnabledFlights.WithRootParent(this));
        }
        public override string ToString()
        {
            return(GetParentString() + GetFlightsString());

            string GetParentString()
            {
                if (Parents.IsEmpty)
                {
                    return(string.Empty);
                }

                using var parentsBuilder = ArrayBuilder <string> .GetInstance(Parents.Count);

                foreach (var parent in Parents)
                {
                    parentsBuilder.Add(parent.ToString());
                }

                var result = string.Join(" || ", parentsBuilder.Order());

                if (parentsBuilder.Count > 1)
                {
                    result = $"({result})";
                }

                return(result);
            }

            string GetFlightsString()
            {
                if (EnabledFlights.IsEmpty)
                {
                    return(string.Empty);
                }

                var result = string.Join(" && ", EnabledFlights.Order());

                if (Parents.Count > 0)
                {
                    result = $" && {result}";
                }

                return(result);
            }
        }