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}