1package cmd23import (4 "fmt"5 "text/tabwriter"67 "github.com/FelineStateMachine/puzzletea/store"8 "github.com/spf13/cobra"9)1011var listAll bool1213var listCmd = &cobra.Command{14 Use: "list",15 Short: "List saved games",16 Long: "Display a table of saved games. Use --all to include abandoned games.",17 RunE: func(cmd *cobra.Command, args []string) error {18 cfg := loadActiveConfig()19 s, err := openStoreFn(cfg.DBPath)20 if err != nil {21 return err22 }23 defer s.Close()2425 var games []store.GameRecord26 if listAll {27 games, err = s.ListAllGames()28 } else {29 games, err = s.ListGames()30 }31 if err != nil {32 return err33 }3435 if len(games) == 0 {36 _, err := fmt.Fprintln(cmd.OutOrStdout(), "No saved games.")37 return err38 }3940 w := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 0, 2, ' ', 0)41 if _, err := fmt.Fprintln(w, "NAME\tGAME\tMODE\tSTATUS\tLAST UPDATED"); err != nil {42 return err43 }44 for _, g := range games {45 if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n",46 g.Name,47 g.GameType,48 g.Mode,49 g.Status,50 g.UpdatedAt.Local().Format("Jan 02 15:04"),51 ); err != nil {52 return err53 }54 }55 return w.Flush()56 },57}5859func init() {60 listCmd.Flags().BoolVar(&listAll, "all", false, "include abandoned games")61}