package tui import ( "strings" tea "github.com/charmbracelet/bubbletea" ) func (m model) handleNetworkMenu() (tea.Model, tea.Cmd) { switch m.cursor { case 0: m.busy = true m.busyTitle = "Network status" return m, func() tea.Msg { result, err := m.app.NetworkStatus() return resultMsg{title: result.Title, body: result.Body, err: err, back: screenNetwork} } case 1: m.busy = true m.busyTitle = "DHCP all interfaces" return m, func() tea.Msg { result, err := m.app.DHCPAllResult() return resultMsg{title: result.Title, body: result.Body, err: err, back: screenNetwork} } case 2: m.pendingAction = actionDHCPOne m.busy = true m.busyTitle = "Interfaces" return m, func() tea.Msg { ifaces, err := m.app.ListInterfaces() return interfacesMsg{ifaces: ifaces, err: err} } case 3: m.pendingAction = actionStaticIPv4 m.busy = true m.busyTitle = "Interfaces" return m, func() tea.Msg { ifaces, err := m.app.ListInterfaces() return interfacesMsg{ifaces: ifaces, err: err} } case 4: m.screen = screenSettings m.cursor = 0 return m, nil } return m, nil } func (m model) handleInterfacePickMenu() (tea.Model, tea.Cmd) { if len(m.interfaces) == 0 { return m, resultCmd("interfaces", "No physical interfaces found", nil, screenNetwork) } m.selectedIface = m.interfaces[m.cursor].Name switch m.pendingAction { case actionDHCPOne: m.busy = true m.busyTitle = "DHCP on " + m.selectedIface return m, func() tea.Msg { result, err := m.app.DHCPOneResult(m.selectedIface) return resultMsg{title: result.Title, body: result.Body, err: err, back: screenNetwork} } case actionStaticIPv4: defaults := m.app.DefaultStaticIPv4FormFields(m.selectedIface) m.formFields = []formField{ {Label: "IPv4 address", Value: defaults[0]}, {Label: "Prefix", Value: defaults[1]}, {Label: "Gateway", Value: strings.TrimSpace(defaults[2])}, {Label: "DNS (space-separated)", Value: defaults[3]}, } m.formIndex = 0 m.screen = screenStaticForm return m, nil default: return m, nil } }