# API MVP Tiak-Tiak

Toutes les requetes sont en `POST` sur `/?e=nom_action`.

## Auth client

### `auth_send_otp`

```json
{
  "phone": "+221771234567"
}
```

### `auth_verify_otp`

```json
{
  "phone": "+221771234567",
  "otp": "123456"
}
```

Reponse:

```json
{
  "success": true,
  "data": {
    "token": "jwt...",
    "user": {
      "id": 1,
      "phone": "+221771234567",
      "role": "client"
    }
  },
  "message": "Connexion reussie."
}
```

## Profil

### `user_profile`

Header:

```text
Authorization: Bearer <client_token>
```

### `user_update_profile`

```json
{
  "name": "Awa Diop",
  "email": "awa@example.com"
}
```

## Estimation

### `delivery_estimate_price`

```json
{
  "pickup_lat": 14.6928,
  "pickup_lng": -17.4467,
  "dropoff_lat": 14.7167,
  "dropoff_lng": -17.4677,
  "is_urgent": true,
  "is_remote_zone": false
}
```

## Livraison client

### `client_create_delivery`

Header client requis.

```json
{
  "pickup_address": "Plateau, Dakar",
  "pickup_lat": 14.667,
  "pickup_lng": -17.435,
  "dropoff_address": "Liberte 6, Dakar",
  "dropoff_lat": 14.735,
  "dropoff_lng": -17.473,
  "package_type": "document",
  "package_weight": "moins de 2kg",
  "description": "Envelope A4",
  "recipient_name": "Mamadou",
  "recipient_phone": "+221781112233",
  "pickup_instructions": "Appeler en arrivant",
  "dropoff_instructions": "Remettre au gardien",
  "payment_method": "wave"
}
```

### `client_confirm_delivery`

```json
{
  "delivery_id": 1
}
```

### `client_cancel_delivery`

```json
{
  "delivery_id": 1,
  "reason": "Erreur adresse"
}
```

### `client_deliveries`

Retourne l'historique du client.

### `client_delivery_detail`

```json
{
  "delivery_id": 1
}
```

## Paiement

### `payment_create`

```json
{
  "delivery_id": 1,
  "method": "wave",
  "idempotency_key": "client-uuid-123"
}
```

### `client_verify_payment`

```json
{
  "payment_id": 1
}
```

### `payment_webhook`

Endpoint appele par le provider.

```json
{
  "provider_reference": "TTK-ABC123",
  "status": "confirmed"
}
```

## Livreur

### `driver_login`

```json
{
  "phone": "+221770000001",
  "password": "secret"
}
```

### `driver_update_availability`

```json
{
  "is_available": true
}
```

### `driver_update_location`

```json
{
  "lat": 14.7001,
  "lng": -17.4502,
  "heading": 120,
  "speed": 28
}
```

### `driver_available_deliveries`

Liste les livraisons ouvertes.

### `driver_accept_delivery`

```json
{
  "delivery_id": 1
}
```

### `driver_reject_delivery`

```json
{
  "delivery_id": 1
}
```

### `driver_update_delivery_status`

Statuts autorises:

- `accepted`
- `arriving_pickup`
- `picked_up`
- `arriving_dropoff`
- `delivered`
- `failed`

```json
{
  "delivery_id": 1,
  "status": "delivered",
  "proof_photo_path": "storage/uploads/proof-1.jpg",
  "recipient_otp": "8392"
}
```

### `driver_deliveries`

Historique livreur.

### `driver_earnings`

Revenus livreur.

## FCM

### `fcm_register_device`

Header client ou livreur requis.

```json
{
  "fcm_token": "firebase-token",
  "platform": "android"
}
```

## Admin

### `admin_login`

```json
{
  "phone": "+221770000099",
  "password": "secret"
}
```

### `admin_deliveries`

Liste les commandes recentes.

### `admin_assign_driver`

```json
{
  "delivery_id": 1,
  "driver_id": 2
}
```

### `admin_cancel_delivery`

```json
{
  "delivery_id": 1,
  "reason": "Demande support"
}
```

### `admin_drivers`

Liste les livreurs.

### `admin_update_pricing`

```json
{
  "name": "Tarif Dakar standard",
  "base_price": 500,
  "price_per_km": 150,
  "urgent_fee": 300,
  "remote_zone_fee": 500,
  "minimum_price": 1000,
  "driver_commission_percent": 75,
  "platform_commission_percent": 25
}
```
