aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-23 12:59:52 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-23 13:00:16 +0100
commit87417c313b455ba0dee19708528cc8d0b830a276 (patch)
tree34b7a2d6bb97157a1d35f57be85b8ff6532865d2 /src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs
parentbed48c3d7e49b1736d50ce42d92bb6c18cf02504 (diff)
Reimplement real time for Vitrasa
Diffstat (limited to 'src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs')
-rw-r--r--src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs b/src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs
new file mode 100644
index 0000000..fde3e0a
--- /dev/null
+++ b/src/Costasdev.Busurbano.Backend/Services/Processors/FeedConfigProcessor.cs
@@ -0,0 +1,84 @@
+using Costasdev.Busurbano.Backend.Helpers;
+using Costasdev.Busurbano.Backend.Types.Arrivals;
+
+namespace Costasdev.Busurbano.Backend.Services.Processors;
+
+public class FeedConfigProcessor : IArrivalsProcessor
+{
+ private readonly FeedService _feedService;
+
+ public FeedConfigProcessor(FeedService feedService)
+ {
+ _feedService = feedService;
+ }
+
+ public Task ProcessAsync(ArrivalsContext context)
+ {
+ var feedId = context.StopId.Split(':')[0];
+ var (fallbackColor, fallbackTextColor) = _feedService.GetFallbackColourForFeed(feedId);
+
+ foreach (var arrival in context.Arrivals)
+ {
+ arrival.Route.ShortName = _feedService.NormalizeRouteShortName(feedId, arrival.Route.ShortName);
+ arrival.Headsign.Destination = _feedService.NormalizeStopName(feedId, arrival.Headsign.Destination);
+
+ // Apply Vitrasa-specific line formatting
+ if (feedId == "vitrasa")
+ {
+ FormatVitrasaLine(arrival);
+ arrival.Shift = _feedService.GetShiftBadge(feedId, arrival.TripId);
+ }
+
+ if (string.IsNullOrEmpty(arrival.Route.Colour) || arrival.Route.Colour == "FFFFFF")
+ {
+ arrival.Route.Colour = fallbackColor;
+ arrival.Route.TextColour = fallbackTextColor;
+ }
+ else if (string.IsNullOrEmpty(arrival.Route.TextColour) || arrival.Route.TextColour == "000000")
+ {
+ arrival.Route.TextColour = ContrastHelper.GetBestTextColour(arrival.Route.Colour);
+ }
+ }
+
+ return Task.CompletedTask;
+ }
+
+ private static void FormatVitrasaLine(Arrival arrival)
+ {
+ arrival.Headsign.Destination = arrival.Headsign.Destination.Replace("*", "");
+
+ if (arrival.Headsign.Destination == "FORA DE SERVIZO.G.B.")
+ {
+ arrival.Headsign.Destination = "García Barbón, 7 (fora de servizo)";
+ return;
+ }
+
+ switch (arrival.Route.ShortName)
+ {
+ case "A" when arrival.Headsign.Destination.StartsWith("\"1\""):
+ arrival.Route.ShortName = "A1";
+ arrival.Headsign.Destination = arrival.Headsign.Destination.Replace("\"1\"", "");
+ break;
+ case "6":
+ arrival.Headsign.Destination = arrival.Headsign.Destination.Replace("\"", "");
+ break;
+ case "FUT":
+ if (arrival.Headsign.Destination == "CASTELAO-CAMELIAS-G.BARBÓN.M.GARRIDO")
+ {
+ arrival.Route.ShortName = "MAR";
+ arrival.Headsign.Destination = "MARCADOR ⚽: CASTELAO-CAMELIAS-G.BARBÓN.M.GARRIDO";
+ }
+ else if (arrival.Headsign.Destination == "P. ESPAÑA-T.VIGO-S.BADÍA")
+ {
+ arrival.Route.ShortName = "RIO";
+ arrival.Headsign.Destination = "RÍO ⚽: P. ESPAÑA-T.VIGO-S.BADÍA";
+ }
+ else if (arrival.Headsign.Destination == "NAVIA-BOUZAS-URZAIZ-G. ESPINO")
+ {
+ arrival.Route.ShortName = "GOL";
+ arrival.Headsign.Destination = "GOL ⚽: NAVIA-BOUZAS-URZAIZ-G. ESPINO";
+ }
+ break;
+ }
+ }
+}