FROM php:8.1.14-apache AS php_apache_upstream
FROM mlocati/php-extension-installer:2 AS php_extension_installer_upstream
FROM composer/composer:2-bin AS composer_upstream
FROM ghcr.io/popina/foxorders-base:latest AS fox_php_base

FROM php_apache_upstream AS php_base

WORKDIR /var/www/html

RUN apt-get update && apt-get install -y \
    acl \
    git \
    unzip \
    libpng-dev \
    libjpeg-dev \
    libwebp-dev \
    libfreetype6-dev \
    libzip-dev \
    libicu-dev \
    libxml2-dev \
    libonig-dev \
    curl \
    openssh-server \
    nano \
    tzdata \
    cron \
    supervisor

ENV TZ=Europe/Paris
RUN ln -snf /usr/share/zoneinfo/Europe/Paris /etc/localtime && \
    echo "Europe/Paris" > /etc/timezone

RUN mkdir /var/run/sshd && \
    echo 'root:Docker!' | chpasswd && \
    sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config && \
    sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/#PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
    sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

RUN echo "cd /var/www/html" >> /root/.bashrc && \
    echo "cd /var/www/html" >> /etc/profile

RUN git config --global --add safe.directory /var/www/html

COPY --from=php_extension_installer_upstream /usr/bin/install-php-extensions /usr/local/bin/
RUN set -eux; \
    docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp && \
    docker-php-ext-install -j$(nproc) \
        gd \
        pdo \
        mysqli \
        pdo_mysql \
        intl \
        zip \
        soap && \
    docker-php-ext-enable intl zip

RUN a2enmod rewrite headers

ARG PHP_MEMORY_LIMIT=512M
ARG PHP_MAX_EXECUTION_TIME=300  

ENV PHP_MEMORY_LIMIT=$PHP_MEMORY_LIMIT PHP_MAX_EXECUTION_TIME=$PHP_MAX_EXECUTION_TIME COMPOSER_MEMORY_LIMIT=-1
RUN echo "memory_limit=${PHP_MEMORY_LIMIT}" > /usr/local/etc/php/conf.d/memory-limit.ini && \
    echo "max_execution_time=${PHP_MAX_EXECUTION_TIME}" > /usr/local/etc/php/conf.d/max-execution-time.ini

COPY docker/php/conf.d/app.ini $PHP_INI_DIR/conf.d/

COPY docker/php/azure_env.sh /usr/local/bin/azure_env.sh
RUN chmod +x /usr/local/bin/azure_env.sh

COPY docker/php/cronjobs /etc/cron.d/cronjobs
RUN chmod +x /etc/cron.d/cronjobs && \
    crontab /etc/cron.d/cronjobs
RUN touch /var/log/cron.log && \
    chmod a+rw /var/log/cron.log

COPY docker/php/run_schedule.sh /usr/local/bin/run_schedule.sh
RUN chmod +x /usr/local/bin/run_schedule.sh

COPY docker/php/supervisor/messenger.conf /etc/supervisor/conf.d/messenger.conf
RUN mkdir -p /var/log/supervisor

# Entrypoint
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint
ENTRYPOINT ["docker-entrypoint"]

ENV COMPOSER_ALLOW_SUPERUSER=1
ENV PATH="${PATH}:/root/.composer/vendor/bin"
COPY --from=composer_upstream /composer /usr/bin/composer

# Dev PHP image
FROM fox_php_base AS php_local

ENV APP_SERVER=local APP_ENV=dev xdebug=develop

VOLUME /var/www/html/

RUN a2dissite 000-default.conf && \
    a2enmod ssl proxy proxy_http headers

COPY docker/apache/ssl/ /etc/apache2/ssl/

COPY docker/apache/foxorders-local.conf /etc/apache2/sites-available/foxorders-local.conf
RUN a2ensite foxorders-local.conf

COPY docker/apache/phpmyadmin.conf /etc/apache2/sites-available/phpmyadmin.conf
RUN a2ensite phpmyadmin.conf

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

# Install xdebug only here
COPY --from=php_extension_installer_upstream /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions xdebug

COPY docker/php/conf.d/app.local.ini $PHP_INI_DIR/conf.d/
RUN rm -f /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

# Dev PHP image
FROM fox_php_base AS php_dev

ENV APP_ENV=dev

RUN a2dissite 000-default.conf
COPY docker/apache/foxorders.conf /etc/apache2/sites-available/foxorders.conf
RUN a2ensite foxorders.conf

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

COPY composer.* symfony.* ./

RUN set -eux; \
    composer install --prefer-dist --no-scripts --no-progress --no-interaction

COPY . ./
RUN rm -Rf docker/

RUN set -eux; \
    mkdir -p var/cache var/log; \
    composer dump-autoload --classmap-authoritative; \
    composer run-script post-install-cmd; \
    chmod +x bin/console; \
    sync;

EXPOSE 80 2222

# Test PHP image
FROM fox_php_base AS php_test

ENV APP_ENV=test
ENV PHP_MEMORY_LIMIT=1024M PHP_MAX_EXECUTION_TIME=300

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" && \
    echo "memory_limit=${PHP_MEMORY_LIMIT}" > /usr/local/etc/php/conf.d/memory-limit.ini && \
    echo "max_execution_time=${PHP_MAX_EXECUTION_TIME}" > /usr/local/etc/php/conf.d/max-execution-time.ini

COPY --from=php_extension_installer_upstream /usr/bin/install-php-extensions /usr/bin/
RUN install-php-extensions xdebug

COPY docker/php/conf.d/app.test.ini $PHP_INI_DIR/conf.d/

COPY composer.* symfony.* ./

RUN set -eux; \
    composer install --prefer-dist --no-scripts --no-progress --no-interaction

COPY . ./
RUN rm -Rf docker/

RUN set -eux; \
    mkdir -p var/cache var/log; \
    composer dump-autoload --classmap-authoritative; \
    composer run-script post-install-cmd; \
    chmod +x bin/console; \
    sync;

# Prod PHP image
FROM fox_php_base AS php_prod

ENV APP_ENV=prod

RUN a2dissite 000-default.conf
COPY docker/apache/foxorders.conf /etc/apache2/sites-available/foxorders.conf
RUN a2ensite foxorders.conf

RUN sed -i 's/#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config

COPY composer.* symfony.* ./

RUN set -eux; \
    composer install --prefer-dist --no-dev --no-scripts --no-progress --no-interaction

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY docker/php/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/

COPY . ./
RUN rm -Rf docker/

RUN set -eux; \
    mkdir -p var/cache var/log; \
    composer dump-autoload --classmap-authoritative --no-dev; \
    composer run-script --no-dev post-install-cmd; \
    chmod +x bin/console; \
    sync;

EXPOSE 80 2222
