#!/bin/bash
set -euo pipefail

# Optional environment variables:
#   PHP_BIN        -> php binary to use (defaults to "php")
#   SYMFONY_ENVS   -> space separated env list (defaults to "dev prod")
#   USE_SUDO       -> set to "1" to run privileged operations with sudo
#   CHOWN_TARGET   -> e.g. "_www:staff" to chown cache dirs after clearing
#   EXTRA_PATHS    -> additional space separated paths to fix permissions

PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PHP_BIN="${PHP_BIN:-php}"
SYMFONY_ENVS="${SYMFONY_ENVS:-dev prod}"
EXTRA_PATHS="${EXTRA_PATHS:-}"

if [[ "${USE_SUDO:-0}" == "1" ]]; then
  PRIV_CMD="sudo"
else
  PRIV_CMD=""
fi

run_privileged() {
  if [[ -n "$PRIV_CMD" ]]; then
    "$PRIV_CMD" "$@"
  else
    "$@"
  fi
}

ensure_dir() {
  local path="$1"
  if [[ ! -d "$path" ]]; then
    mkdir -p "$path"
  fi
}

clean_cache_dir() {
  local env="$1"
  local dir="$PROJECT_ROOT/app/cache/$env"
  if [[ -d "$dir" ]]; then
    echo "Removing stale cache directory: $dir"
    run_privileged rm -rf "$dir"
  fi
}

clear_cache() {
  local env="$1"
  local extra_args=()
  if [[ "$env" == "prod" ]]; then
    extra_args+=(--no-debug)
  fi
  echo "Clearing Symfony cache for env=\"$env\" using $PHP_BIN"
  "$PHP_BIN" app/console cache:clear --env="$env" "${extra_args[@]}"
}

fix_permissions() {
  local target="$1"
  if [[ ! -d "$target" ]]; then
    return
  fi
  echo "Fixing permissions for $target"
  run_privileged chmod -R ug+rwX "$target"
  run_privileged find "$target" -type d -exec chmod 775 {} +
  if [[ -n "${CHOWN_TARGET:-}" ]]; then
    run_privileged chown -R "$CHOWN_TARGET" "$target"
  fi
}

cd "$PROJECT_ROOT"

for env in $SYMFONY_ENVS; do
  clean_cache_dir "$env"
  clear_cache "$env"
done

PATHS_TO_FIX=("app/cache" "app/sessions" "app/logs" "web/pdf_tmp")
if [[ -n "$EXTRA_PATHS" ]]; then
  PATHS_TO_FIX+=($EXTRA_PATHS)
fi

for rel in "${PATHS_TO_FIX[@]}"; do
  abs_path="$PROJECT_ROOT/$rel"
  ensure_dir "$abs_path"
  fix_permissions "$abs_path"
done

echo "Cache cleared and permissions refreshed successfully."
