1package main
2
3import (
4 "encoding/json"
5 "fmt"
6 "log"
7 "os"
8)
9
10func main() {
11 if len(os.Args) < 2 {
12 fmt.Println("Sundial - Live Train Departures")
13 fmt.Println("Usage:")
14 fmt.Println(" go run . server - Start web server")
15 fmt.Println(" go run . tui - Start interactive tui")
16 fmt.Println(" go run . parse <html_file> - Parse HTML file")
17 fmt.Println("Examples:")
18 fmt.Println(" go run . server")
19 fmt.Println(" go run . tui")
20 fmt.Println(" go run . parse sample.html")
21 os.Exit(1)
22 }
23
24 command := os.Args[1]
25
26 switch command {
27 case "server":
28 runServer()
29 case "tui":
30 err := runTUI()
31 if err != nil {
32 log.Fatalf("tui error: %v", err)
33 }
34 case "parse":
35 if len(os.Args) < 3 {
36 fmt.Println("Usage: go run . parse <html_file>")
37 os.Exit(1)
38 }
39 parseFile(os.Args[2])
40 default:
41 // Backward compatibility - treat first arg as filename
42 parseFile(command)
43 }
44}
45
46func runServer() {
47 config, err := LoadConfig("config.yaml")
48 if err != nil {
49 log.Fatalf("Error loading config: %v", err)
50 }
51
52 server := NewServer(config)
53 log.Fatal(server.Start())
54}
55
56func parseFile(filename string) {
57 departures, err := ParseDeparturesFromFile(filename)
58 if err != nil {
59 log.Fatalf("Error parsing departures: %v", err)
60 }
61
62 fmt.Printf("Found %d departures:\n\n", len(departures))
63
64 // Print as formatted JSON
65 jsonData, err := json.MarshalIndent(departures, "", " ")
66 if err != nil {
67 log.Fatalf("Error marshaling to JSON: %v", err)
68 }
69
70 fmt.Println(string(jsonData))
71}