// Package tui package tui import ( "log/slog" "esdi/services" "esdi/tui/internal/controllers" "github.com/rivo/tview" ) type ControlPanel struct { *controllers.Controller DeviceController *controllers.DeviceController } func NewControlPanel(logger *slog.Logger) *ControlPanel { // NOTE: given the services should not be only for the TUI should this be here? baseController := &controllers.Controller{ Logger: logger, App: tview.NewApplication(), } // NOTE: create our device service here devService := services.NewDeviceService(logger.With("service", "DeviceService")) telemService := services.NewTelemetryService(logger, devService) if telemService == nil { panic("failed to create the telemetry service") } go telemService.FindProvider(telemService.CtxMonitor) return &ControlPanel{ Controller: baseController, DeviceController: controllers.NewDeviceController(baseController, devService, telemService), } } func (cp *ControlPanel) Run() error { if err := cp.DeviceController.Main(); err != nil { return err } return cp.App.Run() } func Run(logger *slog.Logger) error { progController := NewControlPanel(logger) return progController.Run() }