package dashboard import ( "context" "fmt" tea "github.com/charmbracelet/bubbletea" "github.com/MDietermann/ArduinoArchSetup/internal/engine" "github.com/MDietermann/ArduinoArchSetup/internal/module" "github.com/MDietermann/ArduinoArchSetup/internal/tui" ) // Run displays the dashboard while engine.Run executes the selected modules. // Returns the engine summary (for writeState) and the top-level error, if any. func Run(ctx context.Context, reg *module.Registry, state tui.WizardState, halt bool) (engine.Summary, error) { selected := state.SelectedIDs() nameByID := make(map[string]string, len(state.Modules)) for _, m := range state.Modules { nameByID[m.ID] = m.Name } m := NewModel(selected, nameByID) p := tea.NewProgram(m, tea.WithContext(ctx)) reporter := tui.NewTeaReporter(p) go func() { summary, err := engine.Run(ctx, reg, engine.RunOptions{ Selected: selected, HaltOnError: halt, Reporter: reporter, }) p.Send(DoneMsg{Summary: summary, Err: err}) }() if _, err := p.Run(); err != nil { return engine.Summary{}, fmt.Errorf("tui run: %w", err) } var sum engine.Summary if m.Summary() != nil { sum = *m.Summary() } return sum, m.RunErr() }