using Xorog.UniversalExtensions.Entities; namespace Xorog.UniversalExtensions; internal static class Internal { internal static string GetShortTimeFormat(this TimeSpan _timespan, TimeFormat timeFormat) { switch (timeFormat) { case TimeFormat.Days: if (_timespan.TotalDays >= 1) return $"{Math.Floor(_timespan.TotalDays).ToString().PadLeft(2, '0')}:{_timespan.Hours.ToString().PadLeft(2, '0')}:{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; if (_timespan.TotalHours >= 1) return $"{Math.Floor(_timespan.TotalHours).ToString().PadLeft(2, '0')}:{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; return $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; case TimeFormat.Hours: if (_timespan.TotalDays >= 1) return $"{Math.Floor(_timespan.TotalHours).ToString().PadLeft(2, '0')}:" + $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; if (_timespan.TotalHours >= 1) return $"{_timespan.Hours.ToString().PadLeft(2, '0')}:" + $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; return $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; case TimeFormat.Minutes: if (_timespan.TotalHours >= 1) return $"{Math.Floor(_timespan.TotalMinutes).ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; return $"{_timespan.Minutes.ToString().PadLeft(2, '0')}:{_timespan.Seconds.ToString().PadLeft(2, '0')}"; default: return _timespan.ToString(); } } internal static string GetTimeFormat(this TimeSpan _timespan, TimeFormat timeFormat, HumanReadableTimeFormatConfig? config = null) { config ??= new(); string returningString = string.Empty; Dictionary humanReadable = new(); switch (timeFormat) { case TimeFormat.Days: { humanReadable.Add($"{Math.Floor(_timespan.TotalDays)} {config.DaysString}", _timespan.TotalDays >= 1); humanReadable.Add($"{_timespan.Hours} {config.HoursString}", _timespan.TotalHours >= 1); humanReadable.Add($"{_timespan.Minutes} {config.MinutesString}", (config.MustIncludeMinutes && _timespan.TotalMinutes >= 1) || (_timespan.TotalMinutes >= 1 && _timespan.TotalDays < 1)); humanReadable.Add($"{_timespan.Seconds} {config.SecondsString}", config.MustIncludeSeconds || _timespan.TotalHours < 1); return string.Join(", ", humanReadable.Where(x => x.Value).Select(x => x.Key)); } case TimeFormat.Hours: { humanReadable.Add($"{Math.Floor(_timespan.TotalHours)} {config.HoursString}", _timespan.TotalHours >= 1); humanReadable.Add($"{_timespan.Minutes} {config.MinutesString}", (config.MustIncludeMinutes && _timespan.TotalMinutes >= 1) || _timespan.TotalHours >= 1); humanReadable.Add($"{_timespan.Seconds} {config.SecondsString}", config.MustIncludeSeconds || _timespan.TotalHours < 1); return string.Join(", ", humanReadable.Where(x => x.Value).Select(x => x.Key)); } case TimeFormat.Minutes: { humanReadable.Add($"{Math.Floor(_timespan.TotalMinutes)} {config.MinutesString}", (config.MustIncludeMinutes && _timespan.TotalMinutes >= 1) || _timespan.TotalMinutes >= 1); humanReadable.Add($"{_timespan.Seconds} {config.SecondsString}", true); return string.Join(", ", humanReadable.Where(x => x.Value).Select(x => x.Key)); } default: return _timespan.ToString(); } } internal static int GetDiff(Color color, Color baseColor) { int a = color.A - baseColor.A, r = color.R - baseColor.R, g = color.G - baseColor.G, b = color.B - baseColor.B; return a * a + r * r + g * g + b * b; } } internal class InternalScheduler { public static Dictionary RegisteredScheduledTasks { get; internal set; } = new Dictionary(); } public class HumanReadableTimeFormatConfig { /// /// The string used for days. /// Defaults to: "days". /// public string DaysString { get; set; } = "days"; /// /// The string used for hours. /// Defaults to: "hours". /// public string HoursString { get; set; } = "hours"; /// /// The string used for minutes. /// Defaults to: "minutes". /// public string MinutesString { get; set; } = "minutes"; /// /// The string used for seconds. /// Defaults to: "seconds". /// public string SecondsString { get; set; } = "seconds"; /// /// Must include minutes if timestamp is >= 1 day. /// Defaults to: false. /// public bool MustIncludeMinutes { get; set; } = false; /// /// Must include seconds if timestamp is >= 1 hour. /// Defaults to: false. /// public bool MustIncludeSeconds { get; set; } = false; }