package main import ( "encoding/json" "fmt" "log" "os" ) func main() { if len(os.Args) < 2 { fmt.Println("Sundial - Live Train Departures") fmt.Println("Usage:") fmt.Println(" go run . server - Start web server") fmt.Println(" go run . tui - Start interactive tui") fmt.Println(" go run . parse - Parse HTML file") fmt.Println("Examples:") fmt.Println(" go run . server") fmt.Println(" go run . tui") fmt.Println(" go run . parse sample.html") os.Exit(1) } command := os.Args[1] switch command { case "server": runServer() case "tui": err := runTUI() if err != nil { log.Fatalf("tui error: %v", err) } case "parse": if len(os.Args) < 3 { fmt.Println("Usage: go run . parse ") os.Exit(1) } parseFile(os.Args[2]) default: // Backward compatibility - treat first arg as filename parseFile(command) } } func runServer() { config, err := LoadConfig("config.yaml") if err != nil { log.Fatalf("Error loading config: %v", err) } server := NewServer(config) log.Fatal(server.Start()) } func parseFile(filename string) { departures, err := ParseDeparturesFromFile(filename) if err != nil { log.Fatalf("Error parsing departures: %v", err) } fmt.Printf("Found %d departures:\n\n", len(departures)) // Print as formatted JSON jsonData, err := json.MarshalIndent(departures, "", " ") if err != nil { log.Fatalf("Error marshaling to JSON: %v", err) } fmt.Println(string(jsonData)) }