FROM --platform=linux/amd64 php:8.2-fpm
ARG TIMEZONE

RUN apt-get update && apt-get install -y \
    openssl \
    ca-certificates \
    unzip \
    nano  \
    mc  \
    supervisor \
    procps \
    wget \
    cron

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions

# Type docker-php-ext-install to see available extensions
#RUN docker-php-ext-install pdo pdo_mysql gd zip intl bcmath \
#    && docker-php-ext-enable opcache

# install xdebug
RUN pecl install xdebug \
    && docker-php-ext-enable xdebug \
    && echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.client_port=9010" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.client_host=host.docker.internal ;192.168.65.254" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

# Set timezone
RUN ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone \
    && printf '[PHP]\ndate.timezone = "%s"\n', ${TIMEZONE} > /usr/local/etc/php/conf.d/tzone.ini \
    && echo '[PHP]\nuser=root\nmemory_limit = 4G\npost_max_size = 32M\nupload_max_filesize = 32M\nmax_execution_time = 300\nopcache.enable=1\nopcache.jit_buffer_size=100M' > /usr/local/etc/php/conf.d/reftrack.ini \
    && echo '[www]\nuser=root\ngroup=root\nlisten = 127.0.0.1:9000\npm = dynamic\npm.max_children = 10\npm.start_servers = 2\npm.min_spare_servers = 1\npm.max_spare_servers = 3\naccess.log = /dev/null' > /usr/local/etc/php-fpm.d/www.conf \
    && "date"

# COMPOSER
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

# FRONT JS/CSS COMPILATION
RUN set -uex; \
    apt-get update; \
    apt-get install -y ca-certificates curl gnupg; \
    mkdir -p /etc/apt/keyrings; \
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
     | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \
    NODE_MAJOR=16; \
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \
     > /etc/apt/sources.list.d/nodesource.list; \
    apt-get -qy update; \
    apt-get -qy install nodejs npm;

RUN install-php-extensions zip pdo_mysql intl gd bcmath soap xsl sockets

WORKDIR /app
COPY package.json /app/package.json

#additional grunt setup
# on container first run you have to execute $ npm i - this creates node_modules with necessary modules
RUN npm install -g grunt-cli

RUN echo "* * * * * root exec /bin/bash -c \". /run/supervisord.env; /app/bin/magento cron:run 2>&1 | grep -v \"Ran jobs by schedule\" >> /app/var/log/magento.cron.log \"" >> /etc/crontab

# SUPERVISORD additional config
COPY ./docker/php-fpm/supervisord.conf /etc/supervisor/supervisord.conf
COPY ./docker/php-fpm/phpfpm-worker.conf /etc/supervisor/conf.d
COPY ./docker/php-fpm/cron-worker.conf /etc/supervisor/conf.d
COPY ./docker/php-fpm/grunt-worker.conf /etc/supervisor/conf.d
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]