package main
import (
"fmt"
"github.com/charmbracelet/lipgloss"
)
func (m model) View() string {
if m.quitting {
return ""
}
body := m.renderScreen()
header := styleTitle.Render("gitfed-ctl") + " " + styleTag.Render(screenLabel(m.screen))
footer := styleFooter.Render(m.footerHint())
return lipgloss.JoinVertical(lipgloss.Left, header, "", body, "", footer)
}
func (m model) renderScreen() string {
switch m.screen {
case screenDashboard:
return m.viewDashboard()
case screenUpdatesCheck:
return m.viewUpdatesCheck()
case screenUpdatesAckBreaking:
return m.viewAckBreaking()
case screenUpdatesConfirm:
return m.viewConfirm()
case screenUpdatesRunning:
return m.viewRunning()
case screenUpdatesSuccess:
return m.viewSuccess()
}
return ""
}
func screenLabel(s screen) string {
names := map[screen]string{
screenDashboard: "accueil",
screenUpdatesCheck: "mises à jour · vérification",
screenUpdatesAckBreaking: "mises à jour · changements cassants",
screenUpdatesConfirm: "mises à jour · confirmation",
screenUpdatesRunning: "mises à jour · en cours",
screenUpdatesSuccess: "mises à jour · terminé",
}
return names[s]
}
func (m model) footerHint() string {
switch m.screen {
case screenDashboard:
hint := "entrée : vérifier les mises à jour · r : rafraîchir · q : quitter"
if !m.kubectlOK && m.k3sYAMLPresent {
hint = "f : réparer kubectl · " + hint
}
return hint
case screenUpdatesCheck:
if m.checked && m.checkErr != nil {
return "r : réessayer · esc : retour"
}
if m.checked && m.upToDate {
return "entrée / esc : retour à l'accueil"
}
return "esc : retour"
case screenUpdatesAckBreaking:
if allAcked(m.ackChecklist) {
return "↑↓ naviguer · espace : cocher · entrée : continuer · esc : annuler"
}
return "↑↓ naviguer · espace : cocher chaque changement cassant pour continuer · esc : annuler"
case screenUpdatesConfirm:
return "espace : bascule sauvegarde · entrée : déployer · esc : annuler"
case screenUpdatesRunning:
if m.pipelineErr != nil {
return "q : quitter"
}
return "ctrl+c : annuler"
case screenUpdatesSuccess:
return "entrée : retour à l'accueil · q : quitter"
}
return "ctrl+c : quitter"
}
func row(gl string, label string, val string) string {
l := styleBody.Render(label)
if val != "" {
return fmt.Sprintf("%s %-46s %s", gl, l, styleBold.Render(val))
}
return fmt.Sprintf("%s %s", gl, l)
}