package ui import ( "fmt" "log" "git.patanix.de/git/kettlebell-app/internal/data" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) func formatDuration(totalSeconds int64) string { mins := totalSeconds / 60 secs := totalSeconds % 60 return fmt.Sprintf("%02d:%02d", mins, secs) } // MakeHistoryScreen erstellt den Bildschirm für die Trainingshistorie. func MakeHistoryScreen(db *data.DatabaseService, parent fyne.Window) fyne.CanvasObject { var history []data.TrainingSession // Platzhalter, wenn die Liste leer ist placeholder := widget.NewLabel("Noch keine Trainingsdaten vorhanden.") placeholder.Alignment = fyne.TextAlignCenter list := widget.NewList( func() int { return len(history) }, func() fyne.CanvasObject { // Template für einen Listeneintrag return widget.NewCard("", "", container.NewVBox( widget.NewLabel(""), // Datum widget.NewSeparator(), widget.NewLabel(""), // Sätze widget.NewLabel(""), // Gewicht widget.NewLabel(""), // Reps widget.NewLabel(""), // Dauer )) }, func(i widget.ListItemID, o fyne.CanvasObject) { // Template mit Daten füllen session := history[i] card := o.(*widget.Card) // Datum als Titel der Karte card.SetTitle(session.Date.Format("02.01.2006 15:04")) // Details im Inhalt der Karte box := card.Content.(*fyne.Container) labels := box.Objects labels[0].(*widget.Label).SetText(fmt.Sprintf("Programm: %s - Tag %d", session.Program, session.BlockDay)) labels[2].(*widget.Label).SetText(fmt.Sprintf("Sätze: %d", session.Sets)) labels[3].(*widget.Label).SetText(fmt.Sprintf("Kettlebells: %.1fkg / %.1fkg", session.WeightLeft, session.WeightRight)) labels[4].(*widget.Label).SetText(fmt.Sprintf("Reps pro Satz: %d", session.RepsPerSet)) labels[5].(*widget.Label).SetText(fmt.Sprintf("Dauer: %s", formatDuration(session.Duration))) }, ) // Funktion zum Neuladen der Daten refreshData := func() { var err error history, err = db.GetHistory() if err != nil { log.Printf("Fehler beim Laden der Historie: %v", err) dialog.ShowError(err, parent) } if len(history) == 0 { placeholder.Show() list.Hide() } else { placeholder.Hide() list.Show() } list.Refresh() } // Initiales Laden refreshData() // Toolbar mit Refresh-Button toolbar := widget.NewToolbar( widget.NewToolbarAction(theme.ViewRefreshIcon(), refreshData), ) return container.NewBorder(toolbar, nil, nil, nil, container.NewStack(list, placeholder)) }