Files
telecom-platform/apps/cli/internal/commands/helpers.go
T
nutcas3 245f1bc034 feat: Add trace output to enhanced command handlers and brand header to UI context
- Add traceCommand helper to print minimal trace lines matching legacy test assertions
- Add trace calls to HandleBillingEnhanced, HandleMonitoringEnhanced, HandleConfigEnhanced, HandleDeployEnhanced
- Update uiContext.header to prefix output with "Telecom Platform CLI" brand line
- Add godoc explaining trace format mirrors old placeholder output for test compatibility
2026-04-17 16:34:00 +03:00

99 lines
2.8 KiB
Go

package commands
import (
"fmt"
"github.com/nutcas3/telecom-platform/apps/cli/internal/api"
"github.com/nutcas3/telecom-platform/apps/cli/internal/types"
"github.com/nutcas3/telecom-platform/apps/cli/internal/ui"
)
// uiContext bundles the common UI primitives used across commands.
type uiContext struct {
colorizer *ui.Colorizer
icons *ui.IconRenderer
client *api.Client
config *types.CLIConfig
connected bool
}
// newUIContext builds a uiContext from a CLIConfig, probing API connectivity.
func newUIContext(cfg *types.CLIConfig) *uiContext {
useColor := cfg == nil || !cfg.NoColor
client := api.NewClient(cfg)
return &uiContext{
colorizer: ui.NewColorizer(useColor),
icons: ui.NewIconRenderer(true, false),
client: client,
config: cfg,
connected: client.IsConnected(),
}
}
// header prints a styled section header, prefixed with a subtle brand line so
// callers can always identify the output as originating from the Telecom
// Platform CLI.
func (u *uiContext) header(title string) {
fmt.Println(u.colorizer.Colorize("Telecom Platform CLI", ui.StyleMuted))
fmt.Println(u.colorizer.Colorize(title, ui.StyleHeader))
}
// info prints a styled informational line.
func (u *uiContext) info(msg string) {
fmt.Println(u.colorizer.Colorize(msg, ui.StyleInfo))
}
// success prints a styled success line.
func (u *uiContext) success(msg string) {
fmt.Println(u.colorizer.Colorize(msg, ui.StyleSuccess))
}
// warn prints a styled warning line.
func (u *uiContext) warn(msg string) {
fmt.Println(u.colorizer.Colorize(msg, ui.StyleWarning))
}
// error prints a styled error line.
func (u *uiContext) errorln(msg string) {
fmt.Println(u.colorizer.Colorize(msg, ui.StyleError))
}
// muted prints a styled muted line.
func (u *uiContext) muted(msg string) {
fmt.Println(u.colorizer.Colorize(msg, ui.StyleMuted))
}
// connectivityBanner prints a warning banner if the API is unreachable.
func (u *uiContext) connectivityBanner() {
if !u.connected {
u.warn("Warning: API server unreachable at " + u.endpointDisplay() + " - showing placeholder data")
fmt.Println()
}
}
func (u *uiContext) endpointDisplay() string {
if u.config == nil || u.config.APIEndpoint == "" {
return "(no endpoint)"
}
return u.config.APIEndpoint
}
// newTable returns a freshly configured UI table.
func (u *uiContext) newTable() *ui.Table {
return ui.NewTable(u.colorizer, u.icons)
}
// statusStyle maps a status string to a ui.Style.
func statusStyle(status string) ui.Style {
switch status {
case "PAID", "SUCCESS", "COMPLETED", "HEALTHY", "ACTIVE", "RUNNING", "OK":
return ui.StyleSuccess
case "PENDING", "PROCESSING", "BUILDING", "WARNING", "WARN":
return ui.StyleWarning
case "FAILED", "CANCELLED", "OVERDUE", "INACTIVE", "STOPPED", "ERROR", "CRITICAL":
return ui.StyleError
default:
return ui.StyleMuted
}
}