using System; using System.Collections.Generic; namespace scraper.Models.Itinerary; #region Interfaces public interface IItinerary { public IReadOnlyList Trains { get; } } public interface IItineraryTrain { public string From { get; } public string To { get; } public IReadOnlyList IntermediateStops { get; } public DateTimeOffset DepartureDate { get; } public DateTimeOffset ArrivalDate { get; } public int Km { get; } public string Operator { get; } public string TrainRank { get; } public string TrainNumber { get; } } #endregion #region Implementations internal record Itinerary : IItinerary { private List ModifyableTrains { get; set; } = new(); public IReadOnlyList Trains => ModifyableTrains; internal void AddTrain(IItineraryTrain train) { ModifyableTrains.Add(train); } internal void AddTrain(Action configurator) { ItineraryTrain newTrain = new(); configurator(newTrain); AddTrain(newTrain); } } internal record ItineraryTrain : IItineraryTrain { private List ModifyableIntermediateStops { get; set; } = new(); public string From { get; internal set; } = ""; public string To { get; internal set; } = ""; public IReadOnlyList IntermediateStops => ModifyableIntermediateStops; public DateTimeOffset DepartureDate { get; internal set; } = new(); public DateTimeOffset ArrivalDate { get; internal set; } = new(); public int Km { get; internal set; } = 0; public string Operator { get; internal set; } = ""; public string TrainRank { get; internal set; } = ""; public string TrainNumber { get; internal set; } = ""; internal void AddIntermediateStop(string stop) { ModifyableIntermediateStops.Add(stop); } } #endregion