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

USER root
RUN apt-get update \
  && apt-get upgrade -y \
  && curl -s https://packagecloud.io/install/repositories/orchardit/sqlrelay/script.deb.sh | bash \
  && apt-get -y install \
    curl \
    apache2 \
    unzip \
    zip \
    rudiments \
    sqlrelay \
    sqlrelay-common \
    sqlrelay-common-dev \
    sqlrelay-c++ \
    sqlrelay-c++-dev \
    php84-sqlrelay \
    php84-pdo-sqlrelay \
  && apt-get clean all \
  && rm -rf /var/lib/apt/lists/*

# Install the DataDog PHP tracer
RUN curl -LO https://github.com/DataDog/dd-trace-php/releases/download/1.19.1/datadog-php-tracer_1.19.1_amd64.deb \
  && dpkg -i datadog-php-tracer_1.19.1_amd64.deb \
  && rm datadog-php-tracer_1.19.1_amd64.deb

# 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

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

# Set Datadog params
ENV DD_TRACE_ANALYTICS_ENABLED=true \
  DD_TRACE_APP_NAME=dev-vapi \
  DD_TRACE_DEBUG=false \
  DD_TRACE_GLOBAL_TAGS=env:dev-vapi \
  APP_HOME=/var/www/html \
  APPLICATION_ENV=development \
  Environment=dev

USER worker

# Prepare the app directory, set permissions and copy SSH key configuration
WORKDIR $APP_HOME

COPY deploy/10-sqlrelay.ini /etc/php/8.4/apache2/conf.d/10-sqlrelay.ini

# Copy application files
COPY application $APP_HOME/application
COPY library $APP_HOME/library
COPY public $APP_HOME/public
COPY scripts $APP_HOME/scripts
COPY src $APP_HOME/src
COPY composer.json composer.lock $APP_HOME/

# Re-generate composer.lock
FROM base AS composer_update
USER worker
WORKDIR $APP_HOME

COPY --chown=worker:worker composer.json composer.lock $APP_HOME/
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 base AS dev_environment
USER root
RUN apt-get update \
  && apt-get upgrade -y \
  && apt-get -y install git \
  && apt-get -y clean \
  && rm -rf /var/lib/apt/lists/*
RUN mkdir ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

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

# Composer Prod Environment
FROM base AS prod_environment
USER root
RUN apt-get update \
  && apt-get upgrade -y \
  && apt-get -y install git \
  && apt-get -y clean \
  && rm -rf /var/lib/apt/lists/*
RUN mkdir ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

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

# Deployment Environment
FROM base 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

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

# Development Environment
FROM base 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

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

# Development Environment with Unit Testing
FROM base AS unit-lint
USER root
RUN apt-get update \
  && apt-get upgrade -y \
  && apt-get -y install git php8.4-xdebug ant \
  && apt-get -y clean \
  && rm -rf /var/lib/apt/lists/*

RUN echo "xdebug.mode=coverage" >> /etc/php/8.4/cli/php.ini
RUN mkdir -p ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

WORKDIR $APP_HOME

COPY --chown=worker:worker tests $APP_HOME/tests
COPY --chown=worker:worker build $APP_HOME/build
COPY --chown=worker:worker deploy/entry_point_tests.sh /usr/local/bin/entry_point_tests.sh
COPY --from=dev_environment --chown=worker:worker $APP_HOME/vendor ./vendor

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

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