using System ;
using System.Linq ;
using System.Text.Json ;
using System.Threading.Tasks ;
using InfoferScraper ;
using InfoferScraper.Scrapers ;
while ( true ) {
Console . WriteLine ( "1. Scrape Train" ) ;
Console . WriteLine ( "2. Scrape Station" ) ;
Console . WriteLine ( "3. Scrape Itineraries" ) ;
Console . WriteLine ( "0. Exit" ) ;
var input = Console . ReadLine ( ) ? . Trim ( ) ;
switch ( input ) {
case "1" :
await PrintTrain ( ) ;
break ;
case "2" :
await PrintStation ( ) ;
break ;
case "3" :
await ScrapeItineraries ( ) ;
break ;
case null :
case "0" :
goto INPUT_LOOP_BREAK ;
}
Console . WriteLine ( ) ;
}
INPUT_LOOP_BREAK : ;
async Task PrintTrain ( ) {
Console . Write ( "Train number: " ) ;
var trainNumber = Console . ReadLine ( ) ? . Trim ( ) ;
if ( trainNumber = = null ) {
return ;
}
Console . WriteLine (
JsonSerializer . Serialize (
await new TrainScraper ( ) . Scrape ( trainNumber ) ,
new JsonSerializerOptions {
PropertyNamingPolicy = JsonNamingPolicy . CamelCase ,
WriteIndented = true ,
}
)
) ;
}
async Task PrintStation ( ) {
Console . Write ( "Station name: " ) ;
var stationName = Console . ReadLine ( ) ? . Trim ( ) ;
if ( stationName = = null ) {
return ;
}
Console . WriteLine (
JsonSerializer . Serialize (
await new StationScraper ( ) . Scrape ( stationName ) ,
new JsonSerializerOptions {
PropertyNamingPolicy = JsonNamingPolicy . CamelCase ,
WriteIndented = true ,
}
)
) ;
}
async Task ScrapeItineraries ( ) {
Console . Write ( "From station: " ) ;
var from = Console . ReadLine ( ) ;
Console . Write ( "To station: " ) ;
var to = Console . ReadLine ( ) ;
if ( from = = null | | to = = null ) return ;
var data = await new RouteScraper ( ) . Scrape ( from , to ) ;
Console . WriteLine ( $"{data.Count} itineraries:" ) ;
Console . WriteLine ( ) ;
void PrintArrDepLine ( DateTimeOffset date , string station ) {
Console . WriteLine ( $"{date:HH:mm} {station}" ) ;
}
foreach ( var itinerary in data ) {
foreach ( var train in itinerary . Trains ) {
PrintArrDepLine ( train . DepartureDate , train . From ) ;
Console . WriteLine ( $" {train.TrainRank,-4} {train.TrainNumber,-5} ({train.Operator}), {train.Km,3} km via {string.Join(" , ", train.IntermediateStops)}" ) ;
PrintArrDepLine ( train . ArrivalDate , train . To ) ;
}
Console . WriteLine ( ) ;
}
}