#!/usr/bin/env bash

builtin_extension_install() {
  ext=${1:1:-1}
  echo "---> Installing extension ${ext}"
  # shellcheck disable=SC2154
  if [ ! -e "${php_layer_dir}/ext/${ext}.so" ]; then
    php-ext-configure "${ext}" --with-php-config="${php_layer_dir}"/bin/php-config
    INSTALL_ROOT="${php_layer_dir}" php-ext-install --ini-name "${php_layer_dir}"/config/php.ini "${ext}"
  fi
}

pecl_extension_install() {
  ext=${1:1:-1}
  echo "---> Installing extension ${ext}"
  # shellcheck disable=SC2154
  if [ ! -e "${php_layer_dir}/ext/${ext}.so" ]; then
    pecl install "${ext}"
    ext_name=$(echo "${ext}" | awk -F "-" '{print $1}')
    php-ext-enable --ini-name "${php_layer_dir}"/config/php.ini "${ext_name}"
  fi
}

urls_extension_install() {
  ext_url=${1:1:-1}
  ext_tmp="${php_layer_dir}"/tmp
  ext_tar=/tmp/$(echo "${ext_url}" | awk -F "/" '{print $NF}')
  ext=$(echo "${ext_tar}" | awk -F "-" '{print $1}' | awk -F "\/" '{print $3}')
  echo "---> Installing extension ${ext_url}"
  curl -fsSL "${ext_url}" -o "${ext_tar}" &&
    mkdir -p "${ext_tmp}" &&
    tar -xf "${ext_tar}" -C "${ext_tmp}" --strip-components=1 &&
    php-ext-configure "${ext_tmp}" --with-php-config="${php_layer_dir}"/bin/php-config &&
    INSTALL_ROOT="${php_layer_dir}" php-ext-install --ini-name "${php_layer_dir}"/config/php.ini "${ext_tmp}" &&
    rm -rf "${ext_tar}" "${ext_tmp}"
}

main() {
  builtin_length=$(jq '.builtin|length' extensions.json)
  for ((i = 0; i < builtin_length; i++)); do
    ext=$(jq .builtin[$i] extensions.json)
    builtin_extension_install "${ext}"
  done

  pecl_length=$(jq '.pecl|length' extensions.json)
  for ((i = 0; i < pecl_length; i++)); do
    ext=$(jq .pecl[$i] extensions.json)
    pecl_extension_install "${ext}"
  done

  urls_length=$(jq '.urls|length' extensions.json)
  for ((i = 0; i < urls_length; i++)); do
    ext=$(jq .urls[$i] extensions.json)
    urls_extension_install "${ext}"
  done

}

main "$@"