#!/usr/bin/env bash
# Appel signé de l'API COVERAF en ligne de commande (bash, curl, openssl).
# Usage : COVERAF_CLE_API=cvr_test_... COVERAF_SECRET=cvr_sig_... ./coveraf.sh POST /v1/devis '{"offre":"securvie_500k","donnees":{"assure":{"date_naissance":"1985-06-15"}}}'
set -euo pipefail

BASE_URL="${COVERAF_BASE_URL:-https://api.coveraf.com}"
METHODE="$1"
CHEMIN="$2"
CORPS="${3:-}"

if [ "$METHODE" = "GET" ]; then
  curl -sS "$BASE_URL$CHEMIN" -H "Authorization: Bearer $COVERAF_CLE_API"
  exit
fi

# Le corps est écrit dans un fichier : curl envoie alors exactement les octets
# signés (important dès qu'il y a des accents).
FICHIER=$(mktemp)
trap 'rm -f "$FICHIER"' EXIT
printf '%s' "$CORPS" > "$FICHIER"

# Signature : HMAC-SHA256 de "<timestamp>.<MÉTHODE>.<chemin>.<corps>"
TIMESTAMP=$(date +%s)
SIGNATURE=$( { printf '%s' "$TIMESTAMP.$METHODE.$CHEMIN."; cat "$FICHIER"; } | openssl dgst -sha256 -hmac "$COVERAF_SECRET" | sed 's/^.* //')

curl -sS -X "$METHODE" "$BASE_URL$CHEMIN" \
  -H "Authorization: Bearer $COVERAF_CLE_API" \
  -H "Content-Type: application/json" \
  -H "X-Coveraf-Timestamp: $TIMESTAMP" \
  -H "X-Coveraf-Signature: v1=$SIGNATURE" \
  -H "Idempotency-Key: ${IDEMPOTENCY_KEY:-$(openssl rand -hex 16)}" \
  --data-binary "@$FICHIER"
