1package main23import (4 "os"5 "time"67 "github.com/charmbracelet/bubbletea"8 "github.com/dami/showings/internal/state"9 "github.com/spf13/cobra"10)1112var venue string13var date string14var gantt bool1516var rootCmd = &cobra.Command{17 Use: "showings",18 Short: "View Alamo Drafthouse showtimes",19 Run: func(cmd *cobra.Command, args []string) {20 defer func() {21 if r := recover(); r != nil {22 os.Exit(1)23 }24 }()2526 var dateFilter *time.Time27 if date != "" {28 t, err := time.Parse("2006-01-02", date)29 if err == nil {30 dateFilter = &t31 }32 } else {33 today := time.Now().Truncate(24 * time.Hour)34 dateFilter = &today35 }3637 p := tea.NewProgram(state.New(venue, dateFilter, gantt), tea.WithAltScreen())38 if _, err := p.Run(); err != nil {39 os.Exit(1)40 }41 },42}4344func Execute() error {45 return rootCmd.Execute()46}4748func init() {49 rootCmd.Flags().StringVarP(&venue, "venue", "v", "westminster", "Alamo Drafthouse venue slug")50 rootCmd.Flags().StringVarP(&date, "date", "d", "", "Filter by date (YYYY-MM-DD)")51 rootCmd.Flags().BoolVarP(&gantt, "gantt", "g", false, "Open in timeline (Gantt) view")52}5354func main() {55 if err := Execute(); err != nil {56 os.Exit(1)57 }58}