package ui import ( "strings" "github.com/charmbracelet/lipgloss" "github.com/humdrum-tiv/sportsball/internal/model" ) // settingsView renders the leagues settings screen: a checklist of every // league — enabled ones first in display order, then a hidden group — with the // cursor row marked. Toggling and reordering happen in handleSettingsKey; this // only draws current state. Flows through View()'s paintBackground like the // other views. func (a App) settingsView() string { header := styleTitle.Render(" LEAGUES ") + lipgloss.NewStyle().Foreground(colAccent2).Bold(true).Render(" show, hide & reorder ") + styleSubtle.Render("(auto-hidden off-season · "+keys.ResetLeagues.Help().Key+" resets overrides)") rows, enabled := a.settingsRows() var lines []string dividerShown := false for i := range rows { if !enabled[i] && !dividerShown { lines = append(lines, styleFaint.Render(" ── hidden ──")) dividerShown = true } lines = append(lines, a.settingsRow(rows[i], enabled[i], i == a.settingsCursor)) } help := styleHelp.Render(strings.Join([]string{ keys.Up.Help().Key + "/" + keys.Down.Help().Key + " move", keys.Toggle.Help().Key + " toggle", keys.MoveUp.Help().Key + "/" + keys.MoveDown.Help().Key + " reorder", keys.ResetLeagues.Help().Key + " auto", keys.Back.Help().Key + " done", }, styleFaint.Render(" · "))) parts := []string{header, "", strings.Join(lines, "\n"), "", help} return styleApp.Render(strings.Join(parts, "\n")) } // settingsRow renders one league line: cursor marker, checkbox, league glyph // and name. Enabled rows get a green check; the cursor row gets an accent ▸. func (a App) settingsRow(l model.League, on, selected bool) string { box := styleSubtle.Render("[ ]") if on { box = lipgloss.NewStyle().Foreground(colWin).Bold(true).Render("[x]") } cursor := " " if selected { cursor = lipgloss.NewStyle().Foreground(colAccent).Bold(true).Render("▸ ") } name := lipgloss.NewStyle().Foreground(teamColor(l.Color)).Bold(true).Render(l.Icon + " " + l.Name) return cursor + box + " " + name }