#!/usr/bin/env bash
# Reserva, reintenta y cancela dos veces en una copia de Kallpa, como el paso 2
# del laboratorio. Las fechas dependen del día en que se corre.
set -euo pipefail

export PORT="${PORT:-3100}"
cd build/kallpa
rm -f data/kallpa.db data/kallpa.db-*
make --no-print-directory seed
node src/main.ts > /tmp/kallpa-recorrido.log 2>&1 &
SERVER=$!
trap 'kill "$SERVER"' EXIT
sleep 1

API="localhost:$PORT"
D=$(date -d '+8 days' +%F)
BODY="{\"courtId\":2,\"memberId\":2,\"date\":\"$D\",\"startHour\":10,\"teamName\":\"Los Halcones\"}"
JSON='content-type: application/json'

# Muestra la línea de estado, las cabeceras que importan aquí y el cuerpo.
show() {
  echo "\$ curl $*"
  curl -s -i "$@" | tr -d '\r' \
    | grep -v -i -E '^(date|connection|keep-alive|content-length|content-type):' \
    | grep -v '^$' | cut -c1-200
  echo
}

echo "--- reservar y reintentar"
show -X POST "$API/api/bookings" -H "$JSON" -d "$BODY"
show -X POST "$API/api/bookings" -H "$JSON" -d "$BODY"

ID=$(curl -s "$API/api/members/2/bookings" | jq 'map(select(.teamName == "Los Halcones"))[0].id')

echo "--- cancelar dos veces"
show -X POST "$API/api/bookings/$ID/cancel"
show -X POST "$API/api/bookings/$ID/cancel"

echo "--- dos errores: la frase de estado la pone Node"
show -X POST "$API/api/bookings" -H "$JSON" -d "{\"courtId\":2,\"memberId\":2,\"date\":\"$D\",\"startHour\":10,\"hours\":4,\"teamName\":\"X\"}"
node -e 'console.log(JSON.stringify({ teamName: "x".repeat(17000) }))' > /tmp/kallpa-grande.json
show -X POST "$API/api/bookings" -H "$JSON" --data @/tmp/kallpa-grande.json
