# Login API Guide (Frontend)

Diese API ist fuer einen 2-stufigen Login mit zwei moeglichen Methoden ausgelegt:
- OTP
- Passwort

Beide Methoden sind fuer beide erlaubten Domains verfuegbar.
Die Domain bestimmt nur die **Default-Methode**.

## Basis

- Base URL (lokal): `http://localhost/.../backend/public`
- Content-Type: `application/json`
- Alle Antworten sind JSON.

## Erlaubte Domains

- `knowledgeagent.com`
- `knowlegeagent.de`

Andere Domains werden mit `403` abgelehnt.

## 1) Schritt: E-Mail pruefen

**Endpoint**
- `POST /login`

**Request**
```json
{
  "email": "user@knowledgeagent.com"
}
```

**Success Response (200)**
```json
{
  "success": true,
  "message": "E-Mail akzeptiert. Anmeldemethode kann im Frontend gewechselt werden.",
  "nextStep": "otp",
  "availableMethods": ["otp", "password"]
}
```

Hinweise:
- `nextStep` ist die Default-Methode fuer die Domain:
  - `knowledgeagent.com` -> `otp`
  - `knowlegeagent.de` -> `password`
- Frontend darf trotzdem immer zwischen `otp` und `password` umschalten.

**Fehler**
- `400`: E-Mail fehlt oder ungueltig
- `403`: Domain nicht erlaubt

## 2a) OTP Login

**Endpoint**
- `POST /login/otp`

**Request**
```json
{
  "email": "user@knowlegeagent.de",
  "otp": "123456"
}
```

**Success Response (200)**
```json
{
  "success": true,
  "message": "Login erfolgreich."
}
```

**Fehler**
- `400`: E-Mail fehlt oder ungueltig
- `403`: Domain nicht erlaubt
- `401`: OTP ungueltig

**Testwert OTP**
- Gueltig: `123456`

## 2b) Passwort Login

**Endpoint**
- `POST /login/password`

**Request**
```json
{
  "email": "user@knowledgeagent.com",
  "password": "123456"
}
```

**Success Response (200)**
```json
{
  "success": true,
  "message": "Login erfolgreich."
}
```

**Fehler**
- `400`: E-Mail fehlt oder ungueltig
- `403`: Domain nicht erlaubt
- `401`: Passwort ungueltig

**Testwert Passwort**
- Gueltig: `123456`

## Frontend-Flow (empfohlen)

1. User gibt E-Mail ein.
2. Frontend ruft `POST /login` auf.
3. Frontend setzt Standardauswahl auf `nextStep`.
4. Frontend zeigt Toggle mit `availableMethods` (`otp` / `password`).
5. Je nach Auswahl:
   - OTP: `POST /login/otp`
   - Passwort: `POST /login/password`
6. Bei `success: true` -> Benutzer als eingeloggt behandeln.

## Schnelle Fehlerbehandlung im UI

- `400`: Eingabefehler direkt im Formular anzeigen.
- `401`: "OTP/Passwort ist ungueltig" anzeigen.
- `403`: Hinweis anzeigen, dass die Domain nicht erlaubt ist.
