# Training Epic 2 Port (Android)

## Umgesetzte Features

### 1) TrainingStatsView Port
- Neuer Compose-Screen: `TrainingStatsScreen`
- Neuer ViewModel-Flow: `TrainingStatsViewModel` mit `StateFlow`
- Daten laden über Repository/Service mit Club-Kontext aus Session
- Abgebildete Vue-Funktionen:
  - KPI-Übersicht (aktive Mitglieder, Durchschnittswerte für Zeiträume)
  - Collapsible Bereiche für Trainingstage und Mitgliederliste
  - Sortierung der Mitglieder (Name, 12M, 3M, Gesamt, letztes Training)
  - Detaildialog pro Mitglied
  - Loading/Error Feedback via bestehendes ErrorFeedback-Muster (Banner + Snackbar)

### 2) PredefinedActivities Port
- Neuer Compose-Screen: `PredefinedActivitiesScreen`
- Neuer ViewModel-Flow: `PredefinedActivitiesViewModel` mit `StateFlow`
- Abgebildete Vue-Funktionen:
  - Laden aller Activities
  - Server-Suche (`search/query`) + Clear Search
  - Auswahl und Detail-Laden einer Activity
  - Create/Update Editor (name, code, duration, durationText, description, imageLink, drawingData)
  - Merge (sourceId -> targetId)
  - Deduplicate
  - Anzeigen vorhandener Bilder + Bild löschen
  - Loading/Error/Success Feedback via bestehendes ErrorFeedback-Muster

### 3) Architektur-Integration
- AppServices erweitert um:
  - `TrainingStatsService`
  - `PredefinedActivitiesService`
- Placeholder-Ablösung für folgende Routen:
  - `/training-stats`
  - `/predefined-activities`
- Repository/Mapper/DTOs für beide Flows ergänzt
- Minimale Mapper-Tests ergänzt

## Offene TODOs
- PredefinedActivities Image-Upload (`POST/PUT /predefined-activities/{id}/image`) ist in dieser Portierung noch nicht als Android-UI-Flow umgesetzt.
- CourtDrawingDialog/CourtDrawingTool-Flow aus Vue (Zeichnen + Upload-Pipeline) ist für PredefinedActivities noch nicht 1:1 umgesetzt.
- TrainingStats verwendet aktuell eine pragmatische, kompakte Compose-Darstellung; visuelle Parität zum Web-Layout kann weiter verfeinert werden.

## Genutzte Endpoints

### Training Stats
- `GET /training-stats/{clubId}`

### Predefined Activities
- `GET /predefined-activities`
- `GET /predefined-activities/{id}`
- `GET /predefined-activities/search/query?q={term}&limit={n}`
- `POST /predefined-activities`
- `PUT /predefined-activities/{id}`
- `POST /predefined-activities/merge`
- `POST /predefined-activities/deduplicate`
- `DELETE /predefined-activities/{id}/image/{imageId}`

## Socket Events
- Für `TrainingStatsView` und `PredefinedActivities` wurden in diesem Block keine zusätzlichen Socket-Events benötigt.
