#!/usr/bin/env bash
# Local-only pre-push CI entrypoint. This file is intentionally ignored by Git.
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"

have() { command -v "$1" >/dev/null 2>&1; }
die() { echo "error: $*" >&2; exit 1; }

run_backend() {
  if have php && have composer; then
    (
      cd "$ROOT/backend"
      APP_ENV=testing DB_CONNECTION=sqlite DB_DATABASE=:memory: DB_URL= CACHE_STORE=array SESSION_DRIVER=array QUEUE_CONNECTION=sync \
        composer validate --no-check-publish
      APP_ENV=testing DB_CONNECTION=sqlite DB_DATABASE=:memory: DB_URL= CACHE_STORE=array SESSION_DRIVER=array QUEUE_CONNECTION=sync \
        php artisan test --parallel --processes="${PARATEST_PROCESSES:-8}"
    )
    return
  fi

  if have docker && docker ps --filter name=erpflow-backend --filter status=running --format '{{.Names}}' | grep -qx erpflow-backend; then
    docker compose --env-file backend/.env exec -T \
      -e APP_ENV=testing -e DB_CONNECTION=sqlite -e DB_DATABASE=:memory: -e DB_URL= \
      -e CACHE_STORE=array -e SESSION_DRIVER=array -e QUEUE_CONNECTION=sync \
      backend sh -c 'composer validate --no-check-publish && php artisan test --parallel --processes="${PARATEST_PROCESSES:-8}"'
    return
  fi

  die "backend CI needs PHP+Composer, or a running erpflow-backend container (make up)."
}

run_frontend() {
  if have npm; then
    (cd "$ROOT/frontend" && npm ci && npm run lint && npm run build)
    return
  fi
  die "frontend CI needs npm on PATH."
}

echo "==> coding-standard"
bash "$ROOT/scripts/check-coding-standard.sh"
echo "==> backend-tests"
run_backend
echo "==> frontend-quality"
run_frontend
echo "==> deploy-script-check"
bash -n "$ROOT/scripts/deploy-production.sh"
PRODUCTION_DEPLOY_PATH="$ROOT" bash "$ROOT/scripts/deploy-production.sh" --dry-run "$(git rev-parse HEAD)" >/dev/null
echo "==> Local CI passed"
