using InnovEnergy.Lib.Units; using InnovEnergy.Lib.Utils; namespace InnovEnergy.App.SaliMax; public static class AsciiArt { public static String CreateBox(params Object[] elements) { var aligned = elements .Select(e => e.ToString()!) .JoinLines() .AlignLeft(); var w = aligned.Width(); var line = "".PadRight(w + 2, '─'); var top = "┌" + line + "┐"; var bottom = "└" + line + "┘"; return aligned .SplitLines() .Select(l => l.SurroundWith(" ")) .Select(l => l.SurroundWith("│")) .Prepend(top) .Append(bottom) .JoinLines(); } public static String CreateHorizontalArrow(Decimal value, String separator) { var valueToString = " " + value.W(); if (value == 0) { valueToString = ""; } var contentWidth = separator.Length; var horizontal = "".PadRight(contentWidth, ' '); var v = valueToString.PadRight(contentWidth); var s = separator.PadRight(contentWidth); return StringUtils.JoinLines( horizontal, v, s, horizontal ); } public static String CreateTransitionPadLeft(String value, String separator) { var contentWidth = separator.Length + 2; var horizontal = "".PadLeft(contentWidth, ' '); var v = value.PadLeft(contentWidth); var s = separator.PadLeft(contentWidth); return StringUtils.JoinLines( horizontal, v, s, horizontal ); } public static String CreateVerticalArrow(Decimal power, Int32 width = 0) { var flow = "V".NewLine() + "V".NewLine() + power.W().NewLine() + "V".NewLine() + "V"; return flow.AlignCenterHorizontal(width); } }