// package win_config -- окно конфигурирования package win_config import ( "fmt" tea "github.com/charmbracelet/bubbletea" "wartank/pkg/alias" "wartank/pkg/cons" "wartank/pkg/types" ) // WinConfig -- окно конфигурирования type WinConfig struct { desk types.IDesktop model tea.Model // Модель для обработки name alias.AWinName // Имя экрана } // NewWinConfig -- возвращает новое окно конфигурирования func NewWinConfig(desk types.IDesktop) (*WinConfig, error) { if desk == nil { return nil, fmt.Errorf("NewWinConfig(): IDesktop==nil") } sf := &WinConfig{ desk: desk, name: cons.WinConfig, } return sf, nil } // Name -- возвращает собственное имя func (sf *WinConfig) Name() alias.AWinName { return sf.name } func (sf *WinConfig) Init() tea.Cmd { // Просто вернуть `nil`, т.е. никаких команд return nil } // Update -- обрабатывает команду цикла func (sf *WinConfig) Update(msg tea.Msg) (tea.Model, tea.Cmd) { winName := alias.AWinName("") switch msg := msg.(type) { // Может клавиша нажата case tea.KeyMsg: switch msg.String() { // Да, нажато, а что именно? case "esc": // Вернуться на шаг назад winName = cons.WinDefault case "1": // Выбор один winName = cons.WinConfigServer case "2": // Вход на сервер if !sf.desk.IsConnect() { winName = cons.WinConnectServer } case "3": // Логин на сервер if !sf.desk.IsLogin() { winName = cons.WinLoginServer } case "4": // Создать админа winName = cons.WinServerMakeAdmin case "5": // Показать меню бото-фермы winName = cons.WinShowMenuBot } } if winName != "" { sf.desk.SetWin(winName) return sf.model, nil } return nil, nil } // View -- перерисовывание окна по требованию func (sf *WinConfig) View() string { s := "Настройки клиента\n\n" s += "[1]-Настройки сервера\n" s += "[2]-Вход на сервер\n" s += "[3]-Логин на сервер\n" s += "[4]-Сделать админа на бот-сервере\n" s += "[5]-Меню бото-фермы\n" s += "\n\n[ctrl+q]-выход [esc]-назад\n" return s }