package banking import ( "fmt" "strings" tea "github.com/charmbracelet/bubbletea" ) type menuModel struct { choice string unread int bankName string } func newMenuModel(bankName string, unreadCount int) menuModel { return menuModel{bankName: bankName, unread: unreadCount} } func (m menuModel) Update(msg tea.Msg) (menuModel, tea.Cmd) { keyMsg, ok := msg.(tea.KeyMsg) if !ok { return m, nil } switch keyMsg.Type { case tea.KeyEnter: return m, nil case tea.KeyBackspace: if len(m.choice) > 0 { m.choice = m.choice[:len(m.choice)-1] } default: ch := keyMsg.String() if len(ch) == 1 && ch[0] >= 32 && ch[0] < 127 { if len(m.choice) < 10 { m.choice += ch } } } return m, nil } func (m menuModel) View() string { var b strings.Builder b.WriteString("\n") b.WriteString(centerText("MAIN MENU")) b.WriteString("\n\n") b.WriteString(thinDivider()) b.WriteString("\n\n") items := []struct { num string desc string }{ {"1", "ACCOUNT SUMMARY"}, {"2", "ACCOUNT DETAIL / TRANSACTIONS"}, {"3", "WIRE TRANSFER"}, {"4", "TRANSACTION HISTORY"}, {"5", fmt.Sprintf("SECURE MESSAGES (%d UNREAD)", m.unread)}, {"6", "CHANGE PIN"}, {"7", "LOGOUT"}, } for _, item := range items { b.WriteString(baseStyle.Render(fmt.Sprintf(" [%s] %s", item.num, item.desc))) b.WriteString("\n") } b.WriteString("\n") b.WriteString(thinDivider()) b.WriteString("\n\n") b.WriteString(titleStyle.Render(" ENTER SELECTION: ")) b.WriteString(inputStyle.Render(m.choice)) b.WriteString(inputStyle.Render("_")) b.WriteString("\n") return b.String() }