#!/usr/bin/env bash
# Build application artifacts on the deploy (Ubuntu) server.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=common.sh
source "${SCRIPT_DIR}/common.sh"

run_build() {
  if [[ "${RUN_BUILD}" != "true" ]]; then
    log "Skipping build (RUN_BUILD=false)"
    return 0
  fi

  log "Building application in ${PROJECT_ROOT}"
  cd "${PROJECT_ROOT}"

  if command -v "${COMPOSER_BIN:-composer}" >/dev/null 2>&1; then
    :
  elif [[ -x /opt/lampp/bin/php ]] && [[ -f "${PROJECT_ROOT}/composer.phar" ]]; then
    COMPOSER_BIN="/opt/lampp/bin/php ${PROJECT_ROOT}/composer.phar"
  elif [[ -x /usr/local/bin/composer ]]; then
    COMPOSER_BIN="/usr/local/bin/composer"
  elif [[ -x "${HOME}/.config/composer/vendor/bin/composer" ]]; then
    COMPOSER_BIN="${HOME}/.config/composer/vendor/bin/composer"
  fi

  if command -v "${COMPOSER_BIN%% *}" >/dev/null 2>&1 || [[ "${COMPOSER_BIN}" == *composer.phar* ]]; then
    log "Running composer install (production)..."
    local -a composer_args=(install --prefer-dist --optimize-autoloader --no-interaction)
    if [[ "${SKIP_COMPOSER_DEV:-true}" == "true" ]]; then
      composer_args+=(--no-dev)
    fi
    if [[ -n "${COMPOSER_INSTALL_EXTRA_FLAGS:-}" ]]; then
      # shellcheck disable=SC2206
      composer_args+=(${COMPOSER_INSTALL_EXTRA_FLAGS})
    fi
    COMPOSER_ALLOW_SUPERUSER="${COMPOSER_ALLOW_SUPERUSER:-1}" \
      ${COMPOSER_BIN:-composer} "${composer_args[@]}"
  else
    warn "composer not found; ensure vendor/ is present or install composer"
  fi

  if [[ "${SKIP_FRONTEND_BUILD:-false}" == "true" ]]; then
    log "Skipping frontend build (SKIP_FRONTEND_BUILD=true)"
  elif [[ -f package.json ]] && command -v "${NODE_BIN:-npm}" >/dev/null 2>&1; then
    log "Running npm ci && npm run build..."
    if [[ -f package-lock.json ]]; then
      "${NODE_BIN:-npm}" ci --no-audit --no-fund
    else
      "${NODE_BIN:-npm}" install --no-audit --no-fund
    fi
    "${NODE_BIN:-npm}" run build
  else
    log "Skipping frontend build (no package.json or npm)"
  fi

  log "Build finished"
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  load_config
  run_build
fi
