# Helper function to get phalcon version
get_phalcon_version() {
  if [ "$extension" = "phalcon5" ]; then
    semver="$(get_pecl_version phalcon stable 5)"
    ([ -n "$semver" ] && echo "$semver") || get_pecl_version phalcon rc 5
  elif [ "$extension" = "phalcon4" ]; then
    echo '4.1.2'
  elif [ "$extension" = "phalcon3" ]; then
    echo '3.4.5'
  fi
}

# Helper function to add phalcon.
add_phalcon_helper() {
  status='Installed and enabled'
  if [ "$(uname -s)" = "Darwin" ]; then
    add_brew_extension "$extension" extension
  else
    packages=("php${version:?}-$extension")
    [ "$extension" = "phalcon4" ] && packages+=("php${version:?}-psr")
    add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
    (check_package "${packages[0]}" && install_packages "${packages[@]}") || pecl_install "phalcon-$(get_phalcon_version)"
  fi
}

# Function to add phalcon3.
add_phalcon3() {
  if shared_extension phalcon; then
    phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
    if [ "$phalcon_version" != "$extension_major_version" ]; then
      add_phalcon_helper
    else
      enable_extension phalcon extension
    fi
  else
    add_phalcon_helper
  fi
}

# Function to add phalcon4.
add_phalcon4() {
  enable_extension psr extension
  if shared_extension phalcon; then
    if check_extension psr; then
      phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
      if [ "$phalcon_version" != "$extension_major_version" ]; then
        add_phalcon_helper
      else
        enable_extension phalcon extension
      fi
    else
      add_phalcon_helper
    fi
  else
    add_phalcon_helper
  fi
}

# Function to add phalcon3.
add_phalcon5() {
  if shared_extension phalcon; then
    phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
    if [ "$phalcon_version" != "$extension_major_version" ]; then
      add_phalcon_helper
    else
      enable_extension phalcon extension
    fi
  else
    add_phalcon_helper
  fi
}

# Function to add phalcon.
add_phalcon() {
  extension=$1
  status='Enabled'
  extension_major_version=${extension: -1}
  if [[ "$extension_major_version" =~ [3-5] ]]; then
    add_phalcon"$extension_major_version" >/dev/null 2>&1
  fi
  add_extension_log "phalcon" "$status"
}