ARG         PARENT_IMAGE=086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:debian13-php84
FROM        $PARENT_IMAGE AS base

USER        root

# Install minimal packages needed by all targets
RUN         apt-get update && \
            apt-get upgrade -y && \
            apt-get -y install \
                curl \
                git \
                unzip \
                zip && \
            apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

# Set common environment variables
ENV         DD_TRACE_ANALYTICS_ENABLED=true \
            DD_TRACE_APP_NAME=dev-workstation74 \
            DD_TRACE_DEBUG=false \
            DD_TRACE_GLOBAL_TAGS=env:dev-workstation \
            APP_HOME=/var/www/html \
            APPLICATION_ENV=development \
            Environment=dev

# Prepare the app directory
RUN         mkdir -p $APP_HOME && \
            chown -R worker $APP_HOME

USER        worker

WORKDIR     $APP_HOME

# Web environment — apache, haproxy, imagemagick, AWS CLI, DataDog + app files
FROM        base AS web_env

USER        root

RUN         apt-get update && \
            apt-get -y install \
                apache2 \
                haproxy \
                locales \
                imagemagick=8:7.1.1.43+dfsg1-1+deb13u11 && \
            apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

RUN         chown haproxy:haproxy /var/lib/haproxy

# Set locale
RUN         sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
            dpkg-reconfigure --frontend=noninteractive locales && \
            update-locale LANG=en_US.UTF-8
ENV         LC_ALL=en_US.UTF-8
ENV         LANG=en_US.UTF-8

# Install AWS CLI
RUN         curl -sL -o awscli.zip https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip && \
            unzip -q awscli.zip && \
            ./aws/install && \
            rm -r aws awscli.zip

# Install the DataDog PHP tracer
RUN         curl -LO https://github.com/DataDog/dd-trace-php/releases/download/1.16.0/datadog-php-tracer_1.16.0_amd64.deb && \
            dpkg -i datadog-php-tracer_1.16.0_amd64.deb && \
            rm datadog-php-tracer_1.16.0_amd64.deb && \
            rm -rf /etc/apache2/apache2.conf

ADD         deploy/apache2.conf /etc/apache2/apache2.conf

# disabling php notice along with default ones
RUN         echo "error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING" >> /etc/php/8.4/cli/conf.d/10-configurable-settings.ini

USER        worker

# Copy application files
COPY        --chown=worker:worker application $APP_HOME/application
COPY        --chown=worker:worker config $APP_HOME/config
COPY        --chown=worker:worker deploy $APP_HOME/deploy
COPY        --chown=worker:worker frontend $APP_HOME/frontend
COPY        --chown=worker:worker library $APP_HOME/library
COPY        --chown=worker:worker public $APP_HOME/public
COPY        --chown=worker:worker src $APP_HOME/src
COPY        --chown=worker:worker composer.json composer.lock $APP_HOME/

# Composer Dev Environment
FROM        web_env AS dev_environment
USER        root
RUN         ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN         --mount=type=secret,id=github_auth,required,target=$APP_HOME/auth.json,uid=1010,gid=1010,mode=0600 \
            composer install && \
            composer dump-autoload --optimize

# Composer Prod Environment
FROM        web_env AS prod_environment
USER        root
RUN         ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN         --mount=type=secret,id=github_auth,required,target=$APP_HOME/auth.json,uid=1010,gid=1010,mode=0600 \
            composer install --no-dev && \
            composer dump-autoload --optimize

# Development Environment
FROM        web_env AS dev

WORKDIR     $APP_HOME
COPY        deploy/entry_point_dev.sh /usr/local/bin/entry_point_dev.sh
COPY        --from=dev_environment --chown=worker:worker $APP_HOME/vendor ./vendor

USER        root
RUN         find $APP_HOME -type d -exec chmod -R 755 {} \; && \
            find $APP_HOME -type f -exec chmod -R 644 {} \; && \
            chgrp -R www-data $APP_HOME

COPY        deploy/apache2.conf /etc/apache2/apache2.conf

STOPSIGNAL  SIGWINCH
EXPOSE      8080

RUN         chmod +x /usr/local/bin/entry_point_dev.sh
ENTRYPOINT  ["/usr/local/bin/entry_point_dev.sh"]

FROM        web_env AS deploy

WORKDIR     $APP_HOME
COPY        deploy/entry_point.sh /usr/local/bin/entry_point.sh
COPY        --from=prod_environment --chown=worker:worker $APP_HOME/vendor ./vendor

USER        root
RUN         find $APP_HOME -type d -exec chmod -R 755 {} \; && \
            find $APP_HOME -type f -exec chmod -R 644 {} \; && \
            chgrp -R www-data $APP_HOME

COPY        deploy/apache2.conf /etc/apache2/apache2.conf

STOPSIGNAL  SIGWINCH
EXPOSE      8080
ENTRYPOINT  ["/usr/local/bin/entry_point.sh"]

# Development Environment with Unit Testing
# Inherits from base (not web_env) so the apt-get layer is cached independently
# of application file changes
FROM        base AS unit-lint
USER        root

RUN         apt-get update && \
            apt-get -y install \
                ant \
                php8.4-xdebug \
                which \
                build-essential \
                checkinstall \
                libncurses5-dev \
                libncursesw5-dev \
                libreadline-dev \
                libsqlite3-dev \
                libgdbm-dev \
                libdb-dev \
                libbz2-dev \
                libexpat1-dev \
                liblzma-dev \
                tk-dev \
                libffi-dev \
                libssl-dev \
                ruby && \
            apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

RUN         ssh-keyscan github.com >> ~/.ssh/known_hosts

# configure php unit
RUN         echo "xdebug.mode=coverage" >> /etc/php/8.4/cli/php.ini

# Install Rake and bundler
RUN         gem install rake bundler

# Install Node.js
RUN         bash -c 'set -o pipefail && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt-get install -y nodejs'

USER        worker
WORKDIR     $APP_HOME

COPY        --chown=worker:worker application $APP_HOME/application
COPY        --chown=worker:worker config $APP_HOME/config
COPY        --chown=worker:worker deploy $APP_HOME/deploy
COPY        --chown=worker:worker frontend $APP_HOME/frontend
COPY        --chown=worker:worker library $APP_HOME/library
COPY        --chown=worker:worker public $APP_HOME/public
COPY        --chown=worker:worker src $APP_HOME/src
COPY        --chown=worker:worker composer.json composer.lock $APP_HOME/
COPY        tests $APP_HOME/tests
COPY        build $APP_HOME/build
COPY        build.xml $APP_HOME/

RUN         --mount=type=secret,id=github_auth,required,target=$APP_HOME/auth.json,uid=1010,gid=1010,mode=0600 \
            composer install && \
            composer dump-autoload --optimize

COPY        --chown=worker:worker deploy/entry_point_tests.sh /usr/local/bin/entry_point_tests.sh

USER        root

RUN         chmod +x /usr/local/bin/entry_point_tests.sh
STOPSIGNAL  SIGWINCH
ENTRYPOINT  ["/usr/local/bin/entry_point_tests.sh"]
