package main
import (
"fmt"
"github.com/charmbracelet/lipgloss"
)
func (m model) View() string {
if m.quitting {
return ""
}
body := m.renderStep()
header := styleTitle.Render("gitfed-install") + " " + styleTag.Render(stepLabel(m.step))
footer := styleFooter.Render(footerHint(m.step))
return lipgloss.JoinVertical(lipgloss.Left, header, "", body, "", footer)
}
func (m model) renderStep() string {
switch m.step {
case stepWelcome:
return m.viewWelcome()
case stepScan:
return m.viewScan()
case stepDomain:
return m.viewDomain()
case stepDNS:
return m.viewDNS()
case stepK3s:
return m.viewK3s()
case stepBuild:
return m.viewBuild()
case stepDeploy:
return m.viewDeploy()
case stepPodStatus:
return m.viewPodStatus()
case stepPodStuck:
return m.viewPodStuck()
case stepVerify:
return m.viewVerify()
case stepAccount:
return m.viewAccount()
case stepSuccess:
return m.viewSuccess()
}
return ""
}
func stepLabel(s step) string {
names := map[step]string{
stepWelcome: "bienvenue", stepScan: "1/9 scan", stepDomain: "2/9 domaine",
stepDNS: "3/9 DNS", stepK3s: "4/9 dépendances", stepBuild: "5/9 image",
stepDeploy: "6/9 déploiement", stepPodStatus: "7/9 état du pod",
stepPodStuck: "7/9 ça bloque", stepVerify: "8/9 vérification",
stepAccount: "9/9 compte admin", stepSuccess: "terminé",
}
return names[s]
}
func footerHint(s step) string {
switch s {
case stepWelcome:
return "entrée : commencer · q : quitter"
case stepDomain:
return "tab : changer de champ · entrée : continuer · ctrl+c : quitter"
case stepDNS:
return "entrée : continuer · r : revérifier · i : ignorer et continuer"
case stepPodStuck:
return "r : reconstruire avec le bon tag · q : quitter"
case stepAccount:
return "entrée : lancer gitfed-tui · s : ignorer pour l'instant"
case stepSuccess:
return "entrée : terminer"
default:
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)
}