# Effigenix ERP – Terminal UI

Interaktive TUI für das Effigenix ERP-Backend. Gebaut mit [Ink](https://github.com/vadimdemedes/ink) (React für Terminal).

## Voraussetzungen

- Node.js 20+, pnpm 9+
- Backend läuft auf `http://localhost:8080`

## Starten

```bash
# Im frontend/-Verzeichnis
pnpm install
pnpm --filter @effigenix/cli dev
```

## Bedienung

**Navigation:** `↑↓` bewegen, `Enter` auswählen/bestätigen, `Escape`/`Backspace` zurück.

### Login

Benutzername und Passwort eingeben, `Tab` zum Feldwechsel, `Enter` auf dem letzten Feld.
Die Session wird in `~/.effigenix/config.json` gespeichert und beim nächsten Start wiederhergestellt.

### Hauptmenü

| Eintrag | Funktion |
|---------|----------|
| Benutzerverwaltung | Liste, Anlage, Details, Passwort |
| Rollenverwaltung | Liste, Details |
| Logout | Session beenden |

### Benutzerverwaltung

- **Liste:** `↑↓` navigieren, `Enter` → Detailansicht
- **Anlegen:** Formular mit Tab-Navigation; Felder werden per Zod validiert (Inline-Fehler)
- **Detailansicht → Aktionen:**
  - `Sperren/Entsperren` – Bestätigungsdialog (J/N)
  - `Rolle zuweisen/entfernen` – interaktive Auswahlliste der verfügbaren Rollen
  - `Passwort ändern` – eigener Screen mit Passwort-Bestätigung
- Erfolgreiche Aktionen zeigen eine grüne Box (auto-dismiss nach 3 s)

### Rollenverwaltung

Liste aller Rollen mit Berechtigungen; Readonly-Ansicht.

---

## Entwicklung

```bash
pnpm --filter @effigenix/cli typecheck   # TypeScript-Check
pnpm --filter @effigenix/cli test        # vitest (15 Tests)
pnpm --filter @effigenix/cli build       # tsup → dist/
```

### Struktur

```
src/
├── components/
│   ├── auth/        # LoginScreen
│   ├── layout/      # MainLayout, Header, StatusBar
│   ├── roles/       # RoleListScreen, RoleDetailScreen, RoleSelectList
│   ├── shared/      # ErrorDisplay, SuccessDisplay, ConfirmDialog, FormInput, LoadingSpinner
│   └── users/       # UserListScreen, UserDetailScreen, UserCreateScreen, ChangePasswordScreen
├── hooks/           # useUsers, useRoles, useTerminalSize
├── state/           # auth-context, navigation-context
└── utils/           # api-client, token-storage
```

### Token-Speicherung

`~/.effigenix/config.json` (chmod 600). Enthält Access-Token, Refresh-Token und Ablaufzeit.
Token-Refresh erfolgt proaktiv (< 5 min bis Ablauf) und reaktiv (bei 401).
