#!/usr/bin/env sh
set -eu

ROOT=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)
PHP_BIN=${PHP:-php}
APP_HOST=${APP_HOST:-127.0.0.1}
APP_PORT=${APP_PORT:-8766}
APP_BASE_URL=${APP_BASE_URL:-http://$APP_HOST:$APP_PORT}

cd "$ROOT"

find config src templates tests -type f -name '*.php' -print0 \
    | xargs -0 -n 1 "$PHP_BIN" -l >/dev/null

vendor/bin/phpunit --colors=never >/dev/null
bin/cake routes >/dev/null

SERVER_LOG=$(mktemp "${TMPDIR:-/tmp}/candlecraft-integrity.XXXXXX.log")

cleanup() {
    if [ "${SERVER_PID:-}" != "" ] && kill -0 "$SERVER_PID" 2>/dev/null; then
        kill "$SERVER_PID" 2>/dev/null || true
        wait "$SERVER_PID" 2>/dev/null || true
    fi
    rm -f "$SERVER_LOG"
}

trap cleanup EXIT INT TERM

bin/cake server -H "$APP_HOST" -p "$APP_PORT" >"$SERVER_LOG" 2>&1 &
SERVER_PID=$!

attempt=0
until curl -fsS "$APP_BASE_URL/" >/dev/null 2>&1; do
    attempt=$((attempt + 1))
    if [ "$attempt" -ge 20 ]; then
        cat "$SERVER_LOG" >&2
        exit 1
    fi
    sleep 1
done

curl -fsSI "$APP_BASE_URL/" >/dev/null
curl -fsSI "$APP_BASE_URL/contact" >/dev/null
curl -fsSI "$APP_BASE_URL/contact/success" >/dev/null
curl -fsSI "$APP_BASE_URL/admin/login" >/dev/null
curl -sSI "$APP_BASE_URL/definitely-not-real" | grep -q " 302 "
curl -sSI "$APP_BASE_URL/definitely-not-real" | grep -qi "location: .*/route-help"

printf 'Integrity checks passed.\n'
