#!/usr/bin/env bash

## #ddev-generated
## Description: Enable or disable xdebug
## Usage: xdebug on|off|enable|disable|true|false|toggle|status|info
## Example: "ddev xdebug" (default is "on"), "ddev xdebug off", "ddev xdebug on", "ddev xdebug toggle", "ddev xdebug status", "ddev xdebug info"
## ExecRaw: false
## Flags: []
## AutocompleteTerms: ["on","off","enable","disable","toggle","status","info"]

if [ $# -eq 0 ] ; then
  enable_xdebug
  exit
fi

xdebug_version=$(php --version | awk '/Xdebug v/ {print $3}')

get_xdebug_status() {
    case ${xdebug_version} in
    v3*)
      status=$(php -d xdebug.start_with_request=no -r 'echo ini_get("xdebug.mode");' 2>/dev/null)
      if [[ "${status}" =~ .*"debug".* ]]; then
        echo "1"
      else
        echo "0"
      fi
      ;;
    v2*)
      echo $(php -d xdebug.remote_autostart=0 -r 'echo ini_get("xdebug.remote_enable");')
      ;;
    *)
      echo "0"
      ;;
    esac
}

get_xdebug_info() {
    php -d xdebug.start_with_request=no -r 'if (function_exists("xdebug_info")) { xdebug_info(); } else { echo "xdebug_info() not available\n"; }' 2>/dev/null
}

case $1 in
  on|true|enable)
    enable_xdebug
    ;;
  off|false|disable)
    disable_xdebug
    ;;
  toggle)
    status=$(get_xdebug_status)
    if [ "${status}" = "1" ]; then
      disable_xdebug
    else
      enable_xdebug
    fi
    ;;
  status)
    status=$(get_xdebug_status)
    if [ "${status}" = "1" ]; then
      echo "xdebug enabled"
    else
      echo "xdebug disabled"
    fi
    ;;
  info)
    status=$(get_xdebug_status)
    if [ "${status}" = "1" ]; then
      get_xdebug_info
    else
      echo "xdebug disabled"
    fi
    ;;
  *)
    echo "Invalid argument: $1"
    ;;
esac
