main
6d86999 ยท 6 months ago 26 commits
 1package stats
 2
 3import (
 4	"log"
 5	"github.com/The-Robin-Hood/ufWall/internal/keys"
 6	"github.com/The-Robin-Hood/ufWall/internal/ufw"
 7	"github.com/The-Robin-Hood/ufWall/internal/ui"
 8
 9	"github.com/charmbracelet/bubbles/key"
10	tea "github.com/charmbracelet/bubbletea"
11)
12
13func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
14	if m.menu != nil {
15		if quit := m.menu.Update(msg); quit {
16			m.menu = nil
17			return m, keys.Refresh()
18		}
19	} else {
20		switch msg := msg.(type) {
21		case tea.KeyMsg:
22			switch {
23			case key.Matches(msg, keys.Bindings.CursorUp):
24				if m.cursorLine > 0 {
25					m.cursorLine--
26				}
27			case key.Matches(msg, keys.Bindings.CursorDown):
28				if m.cursorLine < m.totalOpts - 1 {
29					m.cursorLine++
30				}
31			case key.Matches(msg, keys.Bindings.Execute):
32				return m.openMenu()
33			}
34		}
35	}
36	return m, nil
37}
38
39func (m Model) openMenu() (Model, tea.Cmd) {
40	var options []ui.MenuItem
41
42	switch m.cursorLine {
43	case 0:
44		options = ui.MakeMenuItems(
45			[]string{"Enable Firewall", "Disable Firewall"},
46			func(label string) tea.Cmd {
47				switch label {
48				case "Enable Firewall":
49					log.Println("Enabling Firewall")
50					ufw.Enable()
51				case "Disable Firewall":
52					log.Println("Disabling Firewall")
53					ufw.Disable()
54					return nil
55				}
56				return nil
57			},
58		)
59
60	case 1:
61		options = ui.MakeMenuItems(
62			[]string{"off", "low", "medium", "high", "full"},
63			func(level string) tea.Cmd {
64				log.Println("Setting Log Level :", level)
65				ufw.SetLogging(level)
66				return nil
67			},
68		)
69	}
70
71	menu := ui.NewMenu(options, m.styles)
72	m.menu = &menu
73	return m, nil
74}