axiom-checker/menu.go
2026-01-21 04:17:41 +02:00

160 lines
3.1 KiB
Go

package main
import (
"fmt"
"strconv"
"strings"
"github.com/manifoldco/promptui"
)
func showMainMenu(cfg *Config) (string, error) {
hasSettings := len(cfg.JupiterApiKeys) > 0
items := []string{"Settings", "Start", "Exit"}
if !hasSettings {
items = []string{"Settings (configure API keys first)", "Exit"}
}
mainMenu := promptui.Select{
Label: "Main Menu",
Items: items,
Templates: &promptui.SelectTemplates{
Label: "{{ . }}",
Active: "▸ {{ . | cyan }}",
Inactive: " {{ . }}",
Selected: "{{ . | green }}",
},
}
idx, _, err := mainMenu.Run()
if err != nil {
return "", err
}
if !hasSettings {
if idx == 0 {
return "settings", nil
}
return "exit", nil
}
switch idx {
case 0:
return "settings", nil
case 1:
return "start", nil
case 2:
return "exit", nil
default:
return "exit", nil
}
}
func showSettingsMenu(cfg *Config) error {
for {
items := []string{
fmt.Sprintf("Jupiter API Keys (%d configured)", len(cfg.JupiterApiKeys)),
fmt.Sprintf("Threads: %d", cfg.Threads),
"",
fmt.Sprintf("Solana Check: %s", tern(cfg.EnableSolanaCheck, "✓ enabled", "✗ disabled")),
fmt.Sprintf("Axiom Module: %s", tern(cfg.EnableAxiomModule, "✓ enabled", "✗ disabled")),
fmt.Sprintf("EVM Module: %s", tern(cfg.EnableEVMModule, "✓ enabled", "✗ disabled")),
"",
"Back",
}
settingsMenu := promptui.Select{
Label: "Settings",
Items: items,
Templates: &promptui.SelectTemplates{
Label: "{{ . }}",
Active: "▸ {{ . | cyan }}",
Inactive: " {{ . }}",
Selected: "{{ . | green }}",
},
}
idx, _, err := settingsMenu.Run()
if err != nil {
return err
}
switch idx {
case 0:
if err := configureJupiterKeys(cfg); err != nil {
return err
}
case 1:
if err := configureThreads(cfg); err != nil {
return err
}
case 2:
continue
case 3:
cfg.EnableSolanaCheck = !cfg.EnableSolanaCheck
saveConfig(cfg)
case 4:
cfg.EnableAxiomModule = !cfg.EnableAxiomModule
saveConfig(cfg)
case 5:
cfg.EnableEVMModule = !cfg.EnableEVMModule
saveConfig(cfg)
case 6:
continue
case 7:
return nil
}
}
}
func configureJupiterKeys(cfg *Config) error {
prompt := promptui.Prompt{
Label: "Jupiter API Keys (comma-separated)",
Default: strings.Join(cfg.JupiterApiKeys, ","),
}
result, err := prompt.Run()
if err != nil {
return err
}
if result == "" {
cfg.JupiterApiKeys = []string{}
} else {
keys := strings.Split(result, ",")
for i := range keys {
keys[i] = strings.TrimSpace(keys[i])
}
cfg.JupiterApiKeys = keys
}
return saveConfig(cfg)
}
func configureThreads(cfg *Config) error {
prompt := promptui.Prompt{
Label: "Threads",
Default: strconv.Itoa(cfg.Threads),
Validate: func(s string) error {
_, err := strconv.Atoi(s)
return err
},
}
result, err := prompt.Run()
if err != nil {
return err
}
cfg.Threads, _ = strconv.Atoi(result)
return saveConfig(cfg)
}
func printConfigSummary(cfg *Config) {
colorPrint(ColorCyan, "Jupiter API keys: ")
fmt.Printf("%d\n", len(cfg.JupiterApiKeys))
colorPrint(ColorCyan, "Threads: ")
fmt.Printf("%d\n", cfg.Threads)
}