#!/bin/bash

export MC="-j$(nproc)"

echo
echo "============================================"
echo "PHP version               : ${PHP_VERSION}"
echo "Install extensions        : $1"
echo "============================================"
echo

isPhpVersionGreaterOrEqual() {
    local PHP_MAJOR_VERSION=$(php -r "echo PHP_MAJOR_VERSION;")
    local PHP_MINOR_VERSION=$(php -r "echo PHP_MINOR_VERSION;")

    if [ "$PHP_MAJOR_VERSION" -gt "$1" ] || [ "$PHP_MAJOR_VERSION" -eq "$1" ] && [ "$PHP_MINOR_VERSION" -ge "$2" ]; then
        return 1
    else
        return 0
    fi
}

is_extension_installed() {
    local extension=$1
    if php -m | grep -q "^$extension$"; then
        echo "------ $extension is already installed ------"
        return 0
    else
        return 1
    fi
}

install_php_extensions() {
     local extension=$1
     install-php-extensions $extension
     
     if is_extension_installed "$extension"; then
        echo "------ install-php-extensions $extension succeeded ------"
        return
     fi
    
     echo "------ install-php-extensions $extension failed ------"
}

pecl_install() {
    local extension=$1
    printf "\n" | pecl install $extension
    docker-php-ext-enable $extension
    if is_extension_installed "$extension"; then
       echo "------ pecl install $extension succeeded ------"
       return
    fi
    echo "------ pecl install $extension failed ------"
}

docker_php_ext_install() {
   local extension=$1
   docker-php-ext-install  $extension
   if is_extension_installed "$extension"; then
      echo "------ docker-php-ext-install install $extension succeeded ------"
      return
   fi
   echo "------ docker-php-ext-install install $extension failed------"
}

install_extension_default() {
    local extension=$1
    printf "\n" | pecl install $extension
    if [ $? -eq 0 ]; then
       docker-php-ext-enable $extension
       echo "------ pecl install $extension succeeded ------"
    else
       echo "------ pecl install $extension failed use docker-php-ext-install------"
       docker-php-ext-install ${MC} $extension
       if [ $? -eq 0 ]; then
         echo "------ docker-php-ext-install install $extension succeeded ------"
       else
         echo "------ docker-php-ext-install install $extension failed use install-php-extensions------"
         install-php-extensions $extension
         if [ $? -eq 0 ]; then
           echo "------ install-php-extensions $extension succeeded ------"
         else
           echo "------ install-php-extensions $extension failed ------"
         fi
       fi
    fi
}



#install_gd() {
#    isPhpVersionGreaterOrEqual 8 0
#    if [ "$?" = "1" ]; then
#        # "--with-xxx-dir" was removed from php 7.4,
#        # issue: https://github.com/docker-library/php/issues/912
#        options="--with-freetype --with-jpeg --with-webp"
#    else
#        options="--with-gd --with-freetype-dir=/usr/include/ --with-png-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/"
#    fi
#    apt-get install -y  \
#        libfreetype6 \
#        libfreetype6-dev \
#        libpng-dev \
#        libwebp-dev \
#        libjpeg-dev \
#    && docker-php-ext-configure gd ${options} \
#    && docker-php-ext-install ${MC} gd \
#    && apt-get purge -y \
#        libfreetype6-dev \
#        libpng-dev \
#    && apt-get autoremove -y
#}


install_msg() {
    if [ $? -eq 0 ]; then
        echo "------ install $1 succeeded ------"
    else
        echo "------ install $1 failed ------"
    fi
}

install_memcache() {
   printf "\n"  | pecl install memcache
   install_msg memcache
   docker-php-ext-enable memcache
}

install_pdo_pgsql() {
    apt-get update && apt-get install -y libpq-dev 
    install_msg pdo_pgsql
    docker-php-ext-install  pdo_pgsql
}

install_pdo_mysql() {
    docker-php-ext-install pdo_mysql
    install_msg pdo_mysql
}

install_yaf() {
    pecl install yaf
    install_msg yaf
    docker-php-ext-enable yaf
}

install_extension() {
    local extension=$1
    if is_extension_installed "$extension"; then
        return
    fi
    
    echo "------ install extension: $extension ------"
    
    if [ "$extension" = "gd" ]; then
        install_php_extensions gd
    elif [ "$extension" = "memcache" ]; then
        install_memcache   
    elif [ "$extension" = "yaf" ]; then
        install_yaf   
    elif [ "$extension" = "pdo_pgsql" ]; then
        install_pdo_pgsql  
    elif [ "$extension" = "pdo_mysql" ]; then
        install_pdo_mysql
    elif [ "$extension" = "yaml" ]; then
        apt-get install -y libyaml-dev
        pecl_install yaml
    elif [ "$extension" = "mongodb" ]; then
        apt-get install -y  libssl-dev
        pecl_install mongodb
    elif [ "$extension" = "mcrypt" ]; then
        apt-get install -y libmcrypt-dev
        pecl_install mcrypt
    elif [ "$extension" = "ssh2" ]; then
        apt-get install -y libssh2-1-dev libssh2-1
        pecl_install ssh2
    elif [ "$extension" = "rdkafka" ]; then
        apt-get install -y librdkafka-dev
        pecl_install rdkafka 
    elif [ "$extension" = "varnish" ]; then
        apt-get install -y  libvarnishapi-dev
        pecl_install varnish
    elif [ "$extension" = "bcmath" ]; then
        docker_php_ext_install bcmath
    elif [ "$extension" = "pcntl" ]; then
        docker_php_ext_install pcntl
    elif [ "$extension" = "shmop" ]; then
        docker_php_ext_install shmop  
    elif [ "$extension" = "gettext" ]; then
        docker_php_ext_install gettext
    elif [ "$extension" = "sockets" ]; then
        docker_php_ext_install sockets
    elif [ "$extension" = "sysvsem" ]; then
        docker_php_ext_install sysvsem
    elif [ "$extension" = "sysvmsg" ]; then
        docker_php_ext_install sysvmsg
    elif [ "$extension" = "opcache" ]; then
        docker_php_ext_install opcache
    elif [ "$extension" = "mysqli" ]; then
        docker_php_ext_install mysqli
    elif [ "$extension" = "sysvshm" ]; then
        docker_php_ext_install sysvshm
    elif [ "$extension" = "calendar" ]; then
        docker_php_ext_install calendar                                    
    elif [ "$extension" = "sodium" ]; then
        apt-get install -y  libsodium-dev
        docker_php_ext_install sodium
    elif [ "$extension" = "zip" ]; then
        apt-get update && apt-get install -y  libzip-dev
        docker_php_ext_install zip    
    elif [ "$extension" = "memcached" ]; then
        install_php_extensions memcached 
    elif [ "$extension" = "redis" ]; then
        install_php_extensions redis
    elif [ "$extension" = "xdebug" ]; then
        install_php_extensions xdebug
    elif [ "$extension" = "imap" ]; then
        install_php_extensions imap
    elif [ "$extension" = "intl" ]; then
        install_php_extensions intl
    elif [ "$extension" = "swoole" ]; then
        install_php_extensions swoole
    elif [ "$extension" = "pgsql" ]; then
        install_php_extensions pgsql
    elif [ "$extension" = "curl" ]; then
        install_php_extensions curl
    elif [ "$extension" = "sg11" ]; then
        install_php_extensions sourceguardian
    elif [ "$extension" = "snmp" ]; then
        install_php_extensions snmp
    elif [ "$extension" = "mbstring" ]; then
        install_php_extensions mbstring
    elif [ "$extension" = "pdo_firebird" ]; then
        install_php_extensions pdo_firebird
    elif [ "$extension" = "pdo_dblib" ]; then
        install_php_extensions pdo_dblib
    elif [ "$extension" = "pdo_oci" ]; then
        install_php_extensions pdo_oci
    elif [ "$extension" = "pdo_odbc" ]; then
        install_php_extensions pdo_odbc
    elif [ "$extension" = "oci8" ]; then
        install_php_extensions oci8
    elif [ "$extension" = "odbc" ]; then
        install_php_extensions odbc
    elif [ "$extension" = "soap" ]; then
        install_php_extensions soap
    elif [ "$extension" = "xsl" ]; then
        install_php_extensions xsl
    elif [ "$extension" = "xmlrpc" ]; then
        install_php_extensions xmlrpc
    elif [ "$extension" = "readline" ]; then
        install_php_extensions readline
    elif [ "$extension" = "snmp" ]; then
        install_php_extensions snmp
    elif [ "$extension" = "tidy" ]; then
        install_php_extensions tidy
    elif [ "$extension" = "gmp" ]; then
        install_php_extensions gmp
    elif [ "$extension" = "ldap" ]; then
        install_php_extensions ldap
    elif [ "$extension" = "imagick" ]; then
        install_php_extensions imagick
    elif [ "$extension" = "amqp" ]; then
        install_php_extensions amqp
    elif [ "$extension" = "zookeeper" ]; then
        install_php_extensions zookeeper
    elif [ "$extension" = "ionCube" ]; then
        install_php_extensions ioncube_loader
    elif [ "$extension" = "pdo_sqlsrv" ]; then  
        install_php_extensions pdo_sqlsrv
    elif [ "$extension" = "sqlsrv" ]; then  
        install_php_extensions sqlsrv
    elif [ "$extension" = "enchant" ]; then  
        install_php_extensions enchant
    elif [ "$extension" = "pspell" ]; then  
        install_php_extensions pspell    
    elif [ "$extension" = "bz2" ]; then  
        install_php_extensions bz2
    elif [ "$extension" = "zmq" ]; then  
        install_php_extensions zmq
    elif [ "$extension" = "smbclient" ]; then  
        install_php_extensions smbclient
    elif [ "$extension" = "event" ]; then  
        install_php_extensions event           
    else 
        install_extension_default $extension
    fi 
}

extension=$1

if [[ $extension == *,* ]]; then
    echo "${extension}" | tr ',' '\n' | while read -r extension; do
        install_extension $extension
    done
else
    install_extension $extension
fi

docker-php-source delete 
