Gitfed
bastien-mrq/gitfed / cmd / gitfed-install / view.go
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)
}