cli/pkg/module/service.go

110 lines
2.6 KiB
Go
Raw Normal View History

package module
import (
"context"
"github.com/Snider/Core/pkg/core"
"github.com/wailsapp/wails/v3/pkg/application"
)
// Options holds configuration for the module service.
type Options struct {
AppsDir string // Directory to scan for .itw3.json files
}
// Service wraps Registry for Wails service registration.
type Service struct {
*core.ServiceRuntime[Options]
registry *Registry
config Options
}
// NewService creates a new module service.
func NewService(opts Options) (*Service, error) {
reg := NewRegistry()
if opts.AppsDir != "" {
reg.SetAppsDir(opts.AppsDir)
}
return &Service{
registry: reg,
config: opts,
}, nil
}
// ServiceName returns the canonical name.
func (s *Service) ServiceName() string {
return "github.com/Snider/Core/module"
}
// ServiceStartup is called by Wails on app start.
func (s *Service) ServiceStartup(ctx context.Context, options application.ServiceOptions) error {
// Load any apps from the apps directory
return s.registry.LoadApps(ctx)
}
// Registry returns the underlying registry for direct access.
func (s *Service) Registry() *Registry {
return s.registry
}
// --- Wails-bound methods (exposed to frontend) ---
// RegisterModule registers a module from JSON config string.
func (s *Service) RegisterModule(jsonConfig string) error {
return s.registry.RegisterFromJSON([]byte(jsonConfig))
}
// UnregisterModule removes a module by code.
func (s *Service) UnregisterModule(code string) {
s.registry.Unregister(code)
}
// SetContext changes the active UI context.
func (s *Service) SetContext(ctx string) {
s.registry.SetContext(Context(ctx))
}
// GetContext returns the current context.
func (s *Service) GetContext() string {
return string(s.registry.GetContext())
}
// GetModules returns all registered modules.
func (s *Service) GetModules() []Config {
return s.registry.GetModules()
}
// GetMenus returns menus for the current context.
func (s *Service) GetMenus() []MenuItem {
return s.registry.GetMenus()
}
// GetRoutes returns routes for the current context.
func (s *Service) GetRoutes() []Route {
return s.registry.GetRoutes()
}
// GetUIConfig returns complete UI config for the current context.
func (s *Service) GetUIConfig() UIConfig {
return s.registry.GetUIConfig()
}
// GetAvailableContexts returns all available contexts.
func (s *Service) GetAvailableContexts() []string {
return []string{
string(ContextDefault),
string(ContextDeveloper),
string(ContextRetail),
string(ContextMiner),
}
}
// GetModule returns a specific module by code.
func (s *Service) GetModule(code string) (Config, bool) {
m, ok := s.registry.Get(code)
if !ok {
return Config{}, false
}
return m.Config, true
}