package cli import ( "os" "path/filepath" "sort" "strings" tea "github.com/charmbracelet/bubbletea" "github.com/hachem-wtf/benson/internal/config" ) const cleanUsage = "Usage: clean generated | clean latest | clean all" func runClean(m *model) tea.Cmd { if len(m.args) == 0 { return tea.Println(mutedStyle.Render(cleanUsage)) } switch m.args[0] { case "generated": return tea.Println(cleanGenerated()) case "latest": return tea.Println(cleanLatest(m.cfg)) case "all": return tea.Println(cleanGenerated() + "\n" + cleanLatest(m.cfg)) default: return tea.Println(mutedStyle.Render(cleanUsage)) } } func cleanGenerated() string { if _, err := os.Stat(serverDir); err != nil { return mutedStyle.Render("Server directory doesn't exist.") } if err := os.RemoveAll(serverDir); err != nil { return errorStyle.Render("Failed to remove server directory: " + err.Error()) } return successStyle.Render("Removed server directory.") } func cleanLatest(cfg *config.Config) string { if cfg.BackupLocation == "" { return errorStyle.Render("backup_location must be set in config.") } if _, err := os.Stat(cfg.BackupLocation); err != nil { return mutedStyle.Render("Backup directory doesn't exist.") } entries, err := os.ReadDir(cfg.BackupLocation) if err != nil { return errorStyle.Render("Failed to read backup directory: " + err.Error()) } var zips []string for _, e := range entries { name := e.Name() if strings.HasPrefix(name, "backup_") && strings.HasSuffix(name, ".zip") { zips = append(zips, name) } } if len(zips) == 0 { return mutedStyle.Render("No backup files found.") } sort.Strings(zips) latest := zips[len(zips)-1] if err := os.Remove(filepath.Join(cfg.BackupLocation, latest)); err != nil { return errorStyle.Render("Failed to remove latest backup: " + err.Error()) } return successStyle.Render("Removed latest backup: ") + latest }