#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BACKEND_DIR="$ROOT_DIR/backend"
HOST="${CLINIC_API_HOST:-127.0.0.1}"
PORT="${CLINIC_API_PORT:-8000}"
PIDFILE="$BACKEND_DIR/storage/app/artisan-serve.pid"
LOG_FILE="$BACKEND_DIR/storage/logs/artisan-serve.log"

cd "$BACKEND_DIR"

command -v php >/dev/null 2>&1 || { echo "PHP is required."; exit 1; }
[[ -f artisan ]] || { echo "Missing backend/artisan"; exit 1; }

mkdir -p storage/logs storage/app

if [[ -f "$PIDFILE" ]]; then
  old_pid="$(cat "$PIDFILE" 2>/dev/null || true)"
  if [[ -n "$old_pid" ]] && kill -0 "$old_pid" 2>/dev/null; then
    echo "API already running (PID $old_pid) at http://${HOST}:${PORT}"
    exit 0
  fi
fi

if command -v curl >/dev/null 2>&1 && curl -sf "http://${HOST}:${PORT}/up" >/dev/null 2>&1; then
  echo "API already responding at http://${HOST}:${PORT}"
  exit 0
fi

echo "Starting Laravel API: php artisan serve --host=${HOST} --port=${PORT}"
nohup php artisan serve --host="$HOST" --port="$PORT" >>"$LOG_FILE" 2>&1 &
echo $! >"$PIDFILE"

sleep 2

if kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
  echo "API started (PID $(cat "$PIDFILE")) at http://${HOST}:${PORT}"
  echo "Log: $LOG_FILE"
  exit 0
fi

echo "Failed to start API. See $LOG_FILE"
exit 1
