using System; using System.Collections.Generic; using System.Globalization; using Sony.ChartBot.Entities.ChartApi; using Sony.ChartBot.Entities.Storage; namespace Sony.ChartBot.Messages.Helpers { public class ChartPositionOutputBuilder { public string GetChartPositionsOutput(IEnumerable positions, SupportedCountry country) { var chartPositionText = string.Empty; foreach (var position in positions) { chartPositionText += GetChartPositionText(country, position) + "\r\n"; } return chartPositionText; } public string GetChartPositionText(SupportedCountry country, ChartPosition position) { int? change = null; if (position.PreviousPosition.HasValue) { change = position.PreviousPosition.Value - position.Position; } var changeEmoji = GetChangeEmoji(change); var chartPositionText = $"{country.Emoji} {position.ChartType} #{position.Position} ({position.PreviousPosition?.ToString() ?? "-"}) {changeEmoji} {(change >= 0 ? "+" + change : change.ToString())}"; return chartPositionText; } private string GetChangeEmoji(int? change) { string changeEmoji; if (change == null) { changeEmoji = "🆕"; } else if (change.Value == 0) { changeEmoji = "➡️"; } else if (change.Value > 0) { changeEmoji = "⬆️"; } else { changeEmoji = "⬇️"; } return changeEmoji; } public string GetChartPositionComparisonText(SupportedCountry country, ChartPosition position) { int? change = null; if (position.PreviousPosition.HasValue) { change = position.PreviousPosition.Value - position.Position; } var changeEmoji = GetChangeEmoji(change); var chartPositionText = $"{country.Emoji} #{position.Position} ({position.PreviousPosition?.ToString() ?? "-"}) {changeEmoji} {(change >= 0 ? "+" + change : change.ToString())}"; return chartPositionText; } public string GetChartTimestampsOutput(IEnumerable chartSource) { var chartTimestamps = new List(); foreach (var chart in chartSource) { var timestampTextFormat = chart.Updated.Date == DateTime.Today ? "h:mm tt" : "MMM d h:mm tt"; var timestampText = chart.Updated.Date.ToString(timestampTextFormat, CultureInfo.GetCultureInfo("en-US")); chartTimestamps.Add($"{timestampText} {chart.ChartType}"); } // TODO: Temp to test output chartTimestamps.Add("1:00 AM iTunes"); chartTimestamps.Add("2:00 AM YouTube"); var chartSourcesTimestampsText = "⌚ " + string.Join(", ", chartTimestamps); return chartSourcesTimestampsText; } } }