# TimeClock Android Frontend

Phase 1 enthält die native Android-Grundapp und die gemeinsamen Compose-Design-Widgets.

**Phase 2 (API- und Auth-Fundament)** ist umgesetzt:

- Konfigurierbare API-Basis-URL (`BuildConfig.API_BASE_URL`), Standard: `https://stechuhr3.tsschulz.de/api`.
- HTTP mit OkHttp, JSON mit kotlinx.serialization, normalisierte Fehler (`ApiException`).
- JWT in **EncryptedSharedPreferences** (AndroidX Security Crypto), nicht im Klartext.
- **Login** (`POST /auth/login`), **Logout** (`POST /auth/logout`), **Session-Wiederherstellung** (`GET /auth/me` beim App-Start).
- Login-Oberfläche mit den bestehenden `Tc*`-Widgets; nach Anmeldung die Phase‑1-Demo-Shell mit echtem Benutzernamen und rollenbasierter Navigation (Admin-Zusatzmenü nur bei `role == 1`).
- Debug-Build: Cleartext-HTTP erlaubt (`composeApp/src/debug/AndroidManifest.xml`) für lokales Testen.

**Phase 3 (Kern-Zeiterfassung)** ist umgesetzt:

- Echter aktueller Status über `GET /time-entries/current-state`.
- Stempelaktionen über `POST /time-entries/clock`.
- Laufender Eintrag über `GET /time-entries/running`.
- StatusBox mit echten Zeiten und Aktionsbuttons.
- Tages-/Wochenwerte über `GET /time-entries/stats/summary`.
- Wochenübersicht über `GET /week-overview?weekOffset=...`.
- Automatische Status-Aktualisierung alle 30 Sekunden nach Anmeldung.

**Phase 4 (Buchungs-Workflows)** ist umgesetzt:

- Zeitkorrekturen: Worklog-Einträge nach Datum, heutige Korrekturen, Erstellen und Löschen.
- Urlaub: Liste, Erstellen und Löschen.
- Krankheit: Krankheitstypen, Liste, Erstellen und Löschen.
- Arbeitstage: Jahresstatistik.
- Kalender: Monatsansicht mit Feiertag, Krankheit, Urlaub und Arbeitsstunden.

## API-URL setzen

In `mobile-app/local.properties` (wird typischerweise nicht eingecheckt):

```properties
# Beispiel: lokales Backend im Emulator (Host-Rechner)
timeclock.api.baseUrl=http://10.0.2.2:3010/api
```

oder beim Gradle-Aufruf:

```bash
# Beispiel: lokales Backend statt Standard-Server
./gradlew :composeApp:assembleDebug -Ptimeclock.api.baseUrl=http://10.0.2.2:3010/api
```

## Scope (Phase 1)

- Native Android-App unter `composeApp`.
- Web-inspiriertes Designsystem an `frontend/src/assets/main.css`, `App.vue`, `SideMenu.vue` und `StatusBox.vue`.
- Adaptive Shell: schmale Breiten mit Top-Bar und Bottom-Navigation, Tablet mit persistenter Seitennavigation.
- Nicht umgesetzte Einstellungs-/Admin-Screens bleiben vorerst Demo/Mock; StatusBox, Wochenübersicht und Buchungs-Workflows verwenden echte Backend-Daten.

## Build

Aus diesem Verzeichnis:

```bash
./gradlew :composeApp:assembleDebug
```

Beispiel mit eigenem Gradle-Cache:

```bash
GRADLE_USER_HOME=/tmp/gradle-home ./gradlew :composeApp:assembleDebug --no-daemon
```
