94 lines
2.6 KiB
Go
94 lines
2.6 KiB
Go
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
func (m Model) BuildHeader() string {
|
|
// Calculate cart total and item count
|
|
total := 0.0
|
|
itemCount := 0
|
|
for _, item := range m.Cart {
|
|
total += float64(item.Quantity) * item.Coffee.Price
|
|
itemCount += item.Quantity
|
|
}
|
|
|
|
// Define colors
|
|
whiteStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFFFFF"))
|
|
grayStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#AAAAAA"))
|
|
boldWhiteStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFFFFF")).Bold(true)
|
|
|
|
// Build shop tab
|
|
var shopKeybind, shopName string
|
|
if !m.ViewingCart && !m.ViewingAccount {
|
|
// Active: bold white keybind and name
|
|
shopKeybind = boldWhiteStyle.Render("s")
|
|
shopName = boldWhiteStyle.Render("shop")
|
|
} else {
|
|
// Inactive: bold gray keybind, gray name
|
|
shopKeybind = lipgloss.NewStyle().Foreground(lipgloss.Color("#AAAAAA")).Bold(true).Render("s")
|
|
shopName = grayStyle.Render("shop")
|
|
}
|
|
|
|
// Build cart tab
|
|
var cartKeybind, cartName, cartInfo string
|
|
itemCountText := grayStyle.Render(fmt.Sprintf("[%d]", itemCount))
|
|
|
|
if m.ViewingCart {
|
|
// Active: bold white keybind and name
|
|
cartKeybind = boldWhiteStyle.Render("c")
|
|
cartName = boldWhiteStyle.Render("cart")
|
|
cartInfo = fmt.Sprintf(" %s %s",
|
|
boldWhiteStyle.Render(fmt.Sprintf("$%.2f", total)),
|
|
itemCountText)
|
|
} else {
|
|
// Inactive: bold gray keybind, gray name
|
|
boldGrayStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#AAAAAA")).Bold(true)
|
|
boldWhitePriceStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFFFFF")).Bold(true)
|
|
cartKeybind = boldGrayStyle.Render("c")
|
|
cartName = grayStyle.Render("cart")
|
|
cartInfo = fmt.Sprintf(" %s %s",
|
|
boldWhitePriceStyle.Render(fmt.Sprintf("$%.2f", total)),
|
|
itemCountText)
|
|
}
|
|
|
|
// Build Account Tabs
|
|
var accountKeybind, accountName string
|
|
if m.ViewingAccount {
|
|
accountKeybind = boldWhiteStyle.Render("a")
|
|
accountName = boldWhiteStyle.Render("account")
|
|
} else {
|
|
accountKeybind = lipgloss.NewStyle().Foreground(lipgloss.Color("#AAAAAA")).Bold(true).Render("a")
|
|
accountName = grayStyle.Render("account")
|
|
}
|
|
|
|
// Build the tabs with separator
|
|
separator := whiteStyle.Render("|")
|
|
tabsContent := fmt.Sprintf("%s %s %s %s %s %s %s %s%s",
|
|
shopKeybind,
|
|
shopName,
|
|
separator,
|
|
accountKeybind,
|
|
accountName,
|
|
separator,
|
|
cartKeybind,
|
|
cartName,
|
|
cartInfo,
|
|
)
|
|
|
|
// Add box with padding (no vertical padding, just horizontal)
|
|
tabBox := lipgloss.NewStyle().
|
|
Border(lipgloss.NormalBorder()).
|
|
Padding(0, 2).
|
|
MarginBottom(1)
|
|
|
|
// Center the whole thing
|
|
centered := lipgloss.NewStyle().
|
|
Width(m.WindowWidth).
|
|
Align(lipgloss.Center)
|
|
|
|
return centered.Render(tabBox.Render(tabsContent))
|
|
}
|