#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."

AITUNNEL_URL_OVERRIDE="http://localhost:8990/mock_aitunnel.php" php -S localhost:8990 tests/mock_aitunnel.php >/tmp/mock_aitunnel.log 2>&1 &
AITUNNEL_PID=$!
php -S localhost:8991 tests/mock_callback.php >/tmp/mock_callback.log 2>&1 &
CALLBACK_PID=$!
AITUNNEL_URL_OVERRIDE="http://localhost:8990/mock_aitunnel.php" PHP_CLI_BINARY_OVERRIDE="$(command -v php)" php -S localhost:8989 >/tmp/app_server.log 2>&1 &
APP_PID=$!

trap 'kill $AITUNNEL_PID $CALLBACK_PID $APP_PID 2>/dev/null || true' EXIT
sleep 0.4

FAIL=0

echo "--- success path ---"
rm -f tests/callback_received.json
HTTP_CODE=$(curl -s -o /tmp/completions_response.json -w '%{http_code}' \
  -X POST http://localhost:8989/completions.php \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"hello","context":[{"role":"user","content":"previous msg"}],"callbackUrl":"http://localhost:8991/mock_callback.php","errorCallbackUrl":"http://localhost:8991/mock_callback.php"}')

if [ "$HTTP_CODE" != "202" ]; then
  echo "FAIL: expected HTTP 202, got $HTTP_CODE"
  FAIL=1
else
  echo "OK: HTTP 202 received"
fi

grep -q '"result":"OK"' /tmp/completions_response.json && echo "OK: immediate body correct" || { echo "FAIL: immediate body wrong"; FAIL=1; }

sleep 0.8
if grep -q '"result":"mock answer: hello"' tests/callback_received.json 2>/dev/null; then
  echo "OK: callback received correct result"
else
  echo "FAIL: callback did not receive expected result"
  cat tests/callback_received.json 2>/dev/null || echo "(no file)"
  FAIL=1
fi

echo "--- error path ---"
rm -f tests/callback_received.json
curl -s -o /dev/null -X POST http://localhost:8989/completions.php \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"trigger_error","context":[],"callbackUrl":"http://localhost:8991/mock_callback.php","errorCallbackUrl":"http://localhost:8991/mock_callback.php"}'

sleep 0.8
if grep -q '"error_description":"\\u041e\\u0448\\u0438\\u0431\\u043a\\u0430 \\u0430\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438 AI-\\u0441\\u0435\\u0440\\u0432\\u0438\\u0441\\u0430."' tests/callback_received.json 2>/dev/null || grep -q 'Ошибка авторизации AI-сервиса' tests/callback_received.json 2>/dev/null; then
  echo "OK: error callback received correct message"
else
  echo "FAIL: error callback missing/incorrect"
  cat tests/callback_received.json 2>/dev/null || echo "(no file)"
  FAIL=1
fi

echo "--- registration probe (no callback) ---"
PROBE_CODE=$(curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8989/completions.php -H 'Content-Type: application/json' -d '{}')
if [ "$PROBE_CODE" != "200" ]; then
  echo "FAIL: expected HTTP 200 for callback-less probe (Bitrix24 reachability check), got $PROBE_CODE"
  FAIL=1
else
  echo "OK: probe without callback returns 200"
fi

if [ "$FAIL" -ne 0 ]; then
  echo "SOME CHECKS FAILED"
  exit 1
fi
echo "All completions.php checks passed"
