FROM php:7.3-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libwebp-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-webp-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install mysqli \
    && docker-php-ext-enable mysqli

RUN apt-get update && docker-php-ext-install pdo pdo_mysql && docker-php-ext-enable pdo pdo_mysql

###########################################################################
# xDebug:
###########################################################################

ARG INSTALL_XDEBUG=false

RUN if [ ${INSTALL_XDEBUG} = true ]; then \
  # Install the xdebug extension
  if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
    pecl install xdebug-2.5.5; \
  else \
    pecl install xdebug; \
  fi && \
  docker-php-ext-enable xdebug && \
  sed -i 's/^zend_extension=/;zend_extension=/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
;fi

# Copy xdebug configuration for remote debugging
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /usr/local/etc/php/conf.d/xdebug.ini && \
    sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /usr/local/etc/php/conf.d/xdebug.ini && \
    sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /usr/local/etc/php/conf.d/xdebug.ini


###########################################################################
# Redis and igbinary:
###########################################################################

ARG INSTALL_REDIS=false

RUN if [ ${INSTALL_REDIS} = true ]; then \
    pecl install igbinary \
    && pecl install -a redis \
    && docker-php-ext-enable igbinary redis \
;fi

###########################################################################
# Zip:
###########################################################################

ARG INSTALL_ZIP=false

RUN if [ ${INSTALL_ZIP} = true ]; then \
    apt update && apt install -y libzip-dev \
    && docker-php-ext-install zip \
    && docker-php-ext-enable zip \
;fi

###########################################################################
# Pear Mail and Mail_Mime:
###########################################################################

ARG INSTALL_PEAR_MAIL=false

RUN if [ ${INSTALL_PEAR_MAIL} = true ]; then \
    pear install Mail && pear install Mail_Mime \
;fi

###########################################################################
# BZ2 function:
###########################################################################

ARG INSTALL_BZ2=false

RUN if [ ${INSTALL_BZ2} = true ]; then \
    apt update && apt install -y libbz2-ocaml-dev \
    && docker-php-ext-install bz2 \
    && docker-php-ext-enable bz2 \
;fi

###########################################################################
# INTL function:
###########################################################################

ARG INSTALL_INTL=false

RUN if [ ${INSTALL_INTL} = true ]; then \
    apt update && apt install -y libicu-dev \
    && docker-php-ext-install intl \
    && docker-php-ext-enable intl \
;fi

###########################################################################
# php.ini opts:
###########################################################################

# https://github.com/php/php-src/blob/master/php.ini-development
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

ARG PHP_OPT_SHORT_OPEN_TAG=Off

RUN sed -i "s/^short_open_tag = .*/short_open_tag = $PHP_OPT_SHORT_OPEN_TAG/g" "$PHP_INI_DIR/php.ini"

ARG PHP_OPT_MAX_EXECUTION_TIME=30

RUN sed -i "s/^max_execution_time = .*/max_execution_time = $PHP_OPT_MAX_EXECUTION_TIME/g" "$PHP_INI_DIR/php.ini"

ARG PHP_OPT_MEMORY_LIMIT=128M

RUN sed -i "s/^memory_limit = .*/memory_limit = $PHP_OPT_MEMORY_LIMIT/g" "$PHP_INI_DIR/php.ini"

ARG PHP_OPT_UPLOAD_MAX_FILESIZE=2M

RUN sed -i "s/^upload_max_filesize = .*/upload_max_filesize = $PHP_OPT_UPLOAD_MAX_FILESIZE/g" "$PHP_INI_DIR/php.ini"


###########################################################################
# Prepend nginx 502 on showing errors:
# @see https://stackoverflow.com/questions/55260221/laravel-php-7-3-nginx-502-upstream-prematurely-closed-fastcgi-stdout
###########################################################################

RUN sed -i "s/^log_limit = .*/log_limit = 1024/g" "$PHP_INI_DIR/../php-fpm.d/docker.conf"

###########################################################################
# BCMATH functions:
###########################################################################

RUN docker-php-ext-install bcmath && docker-php-ext-enable bcmath

###########################################################################
# GEOIP:
###########################################################################

RUN apt update \
    && apt install -y libgeoip-dev wget \
    && rm -rf /var/lib/apt/lists/* \
    && pecl install geoip-1.1.1 \
    && docker-php-ext-enable geoip

###########################################################################
# PGSQL:
###########################################################################

RUN apt-get update && apt install -y libpq-dev \
    && docker-php-ext-install pdo_pgsql && docker-php-ext-enable pdo_pgsql