package main import ( "fmt" "os" "github.com/spf13/cobra" "gitea.oblak.solutions/dimitar/gitFlow/internal/ai" "gitea.oblak.solutions/dimitar/gitFlow/internal/app" "gitea.oblak.solutions/dimitar/gitFlow/internal/config" "gitea.oblak.solutions/dimitar/gitFlow/internal/presenter" "gitea.oblak.solutions/dimitar/gitFlow/internal/tui" ) // newTUICmd launches the interactive terminal UI. func newTUICmd() *cobra.Command { cmd := &cobra.Command{ Use: "tui", Short: "Start the interactive terminal UI", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { cfg, err := config.Load(cmd.Flags()) if err != nil { return err } if !cmd.Flags().Changed("dir") && isTerminal(os.Stdin) { if d, err := promptDir(cfg.Dir); err == nil { cfg.Dir = d } } a, err := app.New(cfg) if err != nil { return err } var aiProvider ai.Provider if cfg.AI.Enabled { aiProvider, err = ai.NewProvider(cfg.AI) if err != nil { fmt.Fprintf(os.Stderr, "warning: %v\n", err) } } opts := presenter.Options{ Color: presenter.ParseColorMode(cfg.Color), Theme: presenter.ParseTheme(cfg.Theme), } p, err := tui.New(cfg, a, aiProvider, opts) if err != nil { return fmt.Errorf("tui: %w", err) } if _, err := p.Run(); err != nil { return fmt.Errorf("tui: %w", err) } return nil }, } config.RegisterFlags(cmd.Flags()) return cmd }