# Base image
FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:debian13-php84 AS base

USER        root

# Install required packages
RUN         apt-get update && \
            apt-get upgrade -y && \
            apt-get -y install --no-install-recommends \
                curl \
                git \
                openssh-client \
                unzip \
                zip

# Set the default environment
ENV         APPLICATION_ENV=development
ENV         Environment=dev

# Prepare the app directory
ENV         APP_HOME=/var/www/html
RUN         mkdir -p $APP_HOME && \
            chown -R worker $APP_HOME

USER        worker

RUN         mkdir -p ~/.ssh && \
            ssh-keyscan github.com >> ~/.ssh/known_hosts

COPY        --chown=worker:worker composer.json composer.lock $APP_HOME/

FROM        base AS web_env

USER        root

RUN         apt-get -y install apache2 haproxy locales

# 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

RUN         chown haproxy:haproxy /var/lib/haproxy

# 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.14.0/datadog-php-tracer_1.14.0_amd64.deb && \
            dpkg -i datadog-php-tracer_1.14.0_amd64.deb && \
            rm datadog-php-tracer_1.14.0_amd64.deb

RUN         rm -rf /etc/apache2/apache2.conf

# Set Datadog parameters
ENV         DD_TRACE_ANALYTICS_ENABLED=true
ENV         DD_TRACE_APP_NAME=dev-oa
ENV         DD_TRACE_DEBUG=false
ENV         DD_TRACE_GLOBAL_TAGS=env:dev-oa

# disabling php notice along with default ones
RUN         echo "error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~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 frontend $APP_HOME/frontend
COPY        --chown=worker:worker library $APP_HOME/library
COPY        --chown=worker:worker public $APP_HOME/public
COPY        --chown=worker:worker scripts $APP_HOME/scripts
COPY        --chown=worker:worker src $APP_HOME/src

# Re-generate composer.lock
FROM        base AS composer_update

WORKDIR     $APP_HOME

# Copy application files
COPY        --chown=worker:worker application $APP_HOME/application
COPY        --chown=worker:worker config $APP_HOME/config
COPY        --chown=worker:worker library $APP_HOME/library
COPY        --chown=worker:worker public $APP_HOME/public
COPY        --chown=worker:worker scripts $APP_HOME/scripts
COPY        --chown=worker:worker src $APP_HOME/src
COPY        --chown=worker:worker deploy/update_composer_lock.sh /usr/local/bin/update_composer_lock.sh

ENTRYPOINT  ["/usr/local/bin/update_composer_lock.sh"]

# Composer Dev Environment
FROM        web_env AS dev

USER        root

RUN         apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

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
COPY        deploy/entry_point_dev.sh /usr/local/bin/entry_point_dev.sh

USER        worker

WORKDIR     $APP_HOME

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

USER        root

STOPSIGNAL  SIGWINCH

EXPOSE      8080

RUN         chmod +x /usr/local/bin/entry_point_dev.sh

ENTRYPOINT  ["/usr/local/bin/entry_point_dev.sh"]

# Deployment Environment
FROM        web_env AS deploy

USER        root

RUN         apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

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/haproxy_*.cfg $APP_HOME/deploy/
COPY        deploy/.htaccess $APP_HOME/public/
COPY        deploy/apache2.conf /etc/apache2/apache2.conf
COPY        deploy/entry_point.sh /usr/local/bin/entry_point.sh
COPY        deploy/disk_space_check.sh /usr/local/bin/disk_space_check.sh

USER        worker

WORKDIR     $APP_HOME

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

USER        root

STOPSIGNAL  SIGWINCH
EXPOSE      8080

ENTRYPOINT  ["/usr/local/bin/entry_point.sh"]

# Cron Environment
FROM        web_env AS cron

USER        root

RUN         apt-get -y install sshpass && \
            apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

WORKDIR     $APP_HOME

COPY        deploy/cron/entry_point.sh /usr/local/bin/entry_point.sh

USER        worker

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

ENTRYPOINT  ["/usr/local/bin/entry_point.sh"]

# Development Environment with Unit Testing
FROM        base AS unit-lint

USER        root

RUN         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/*

# 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 application files
COPY        --chown=worker:worker application $APP_HOME/application
COPY        --chown=worker:worker config $APP_HOME/config
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 scripts $APP_HOME/scripts
COPY        --chown=worker:worker src $APP_HOME/src
COPY        --chown=worker:worker tests $APP_HOME/tests
COPY        --chown=worker:worker build.xml $APP_HOME/

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

USER        root

COPY        deploy/entry_point_tests.sh /usr/local/bin/entry_point_tests.sh
RUN         chmod +x /usr/local/bin/entry_point_tests.sh

STOPSIGNAL  SIGWINCH

ENTRYPOINT  ["/usr/local/bin/entry_point_tests.sh"]
