# Parent image plus system packages and config
FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:debian13-php84 AS base

USER        root

# Install and configure apache and php packages
RUN         apt-get -y update && \
            apt-get -y --no-install-recommends install \
                curl \
                git \
                zip \
                openssh-client \
                sshpass \
                flac=1.5.0+ds-2 \
                expect \
                jq \
                locales \
                ffmpeg=7:7.1.5-0+deb13u1 \
                imagemagick=8:7.1.1.43+dfsg1-1+deb13u11 && \
            apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

RUN         ffmpeg -version
RUN         convert -version
RUN         flac -version

# Set and prepare the app directory
ENV         APP_HOME=/var/app
RUN         mkdir $APP_HOME && \
            chown -R worker $APP_HOME

WORKDIR     $APP_HOME

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

# 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

# Custom temp dir owned by worker — /tmp contains read-only files from parent
# image layers that rm -rf can't delete, so we use a clean dir the worker owns
RUN         mkdir -p $APP_HOME/tmp && chown worker:worker $APP_HOME/tmp
ENV         TMPDIR=$APP_HOME/tmp

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

# Install iTMS Transporter
COPY        install_itms_transporter.sh install_itms_transporter.sh
RUN         curl -sL -o iTMSTransporter_installer.sh https://orcd-public.theorchard.io/Technology/iTMSTransporter_installer_linux_x64_4.2.0.16.sh &&  \
            chmod 700 iTMSTransporter_installer.sh && \
            chmod 700 install_itms_transporter.sh && \
            ./install_itms_transporter.sh && \
            /usr/local/itms/bin/iTMSTransporter -version && \
            rm iTMSTransporter_installer.sh && \
            rm install_itms_transporter.sh

ENV         PATH="${PATH}:/usr/local/itms/bin/"

RUN         iTMSTransporter -version

FROM        base AS deploy

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

RUN         apt-get purge -y git && \
            apt-get -y autoremove

COPY        --chown=worker src $APP_HOME/src
COPY        --chown=worker encode_tracks.php $APP_HOME/encode_tracks.php
COPY        --chown=worker deliver_tracks.php $APP_HOME/deliver_tracks.php
COPY        --chown=worker scripts/obtain_encoding_orders.php $APP_HOME/scripts/
COPY        deploy/worker_entry_point.sh /usr/local/bin/entry_point.sh

USER        worker

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

# dev obtain-eo application with entr installed
FROM        base AS local-worker-base

RUN         apt-get -y update && \
            apt-get -y install \
                entr \
                php8.4-xdebug && \
            apt-get -y clean && \
            rm -rf /var/lib/apt/lists/*

COPY        ./localdev/xdebug.ini /etc/php/8.4/cli/conf.d/20-xdebug.ini
COPY        ./localdev/dbgpClient $APP_HOME

RUN         --mount=type=secret,id=github_auth,required,target=$APP_HOME/auth.json composer install --no-dev

RUN         apt-get purge -y git && \
            apt-get -y autoremove

RUN         composer dump-autoload --optimize

FROM        local-worker-base AS obtain-eo

COPY        --chown=worker scripts/obtain_encoding_orders.php $APP_HOME/scripts/
COPY        --chown=worker src $APP_HOME/src
COPY        deploy/worker_entry_point.sh /usr/local/bin/entry_point.sh

USER        worker

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

# dev encode application with entr installed
FROM        local-worker-base AS encode

COPY        --chown=worker encode_tracks.php $APP_HOME/encode_tracks.php
COPY        --chown=worker src $APP_HOME/src
COPY        deploy/worker_entry_point.sh /usr/local/bin/entry_point.sh

USER        worker

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

# dev deliver application with entr installed
FROM        local-worker-base AS deliver

COPY        --chown=worker deliver_tracks.php $APP_HOME/deliver_tracks.php
COPY        --chown=worker src $APP_HOME/src
COPY        deploy/worker_entry_point.sh /usr/local/bin/entry_point.sh

USER        worker

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

# Tests application
FROM        base AS dev

RUN         apt-get -y update && \
            apt-get -y install  ant  php8.4-xdebug yamllint && \
            apt-get clean all && \
            rm -rf /var/lib/apt/lists/*

RUN         php --version

RUN         --mount=type=secret,id=github_auth,required,target=$APP_HOME/auth.json composer install

COPY        --chown=worker src $APP_HOME/src
COPY        --chown=worker encode_tracks.php $APP_HOME/encode_tracks.php
COPY        --chown=worker deliver_tracks.php $APP_HOME/deliver_tracks.php
COPY        --chown=worker scripts/obtain_encoding_orders.php $APP_HOME/scripts/
COPY        --chown=worker build/build.xml $APP_HOME/

RUN         composer dump-autoload --optimize

FROM        dev AS integration

COPY        --chown=worker tests $APP_HOME/tests

USER        root
COPY        build/bin/integration.sh /usr/local/bin/integration.sh

CMD         ["/usr/local/bin/integration.sh"]

FROM        dev AS unit-lint

COPY        --chown=worker ./localdev/ssh/client_id_rsa /tmp/id_rsa
COPY        --chown=worker ./localdev/ssh/server_rsa_key.pub /tmp/server_rsa_key.pub

COPY        --chown=worker docker-compose.yaml $APP_HOME/
COPY        --chown=worker docker-compose.unit-lint.yaml $APP_HOME/
COPY        --chown=worker tests $APP_HOME/tests
COPY        --chown=worker build/.php-cs-fixer.dist.php build/phpstan.neon.dist $APP_HOME/build/

ENV         XDEBUG_MODE="coverage"

USER        root
COPY        build/bin/unit_lint.sh /usr/local/bin/unit_lint.sh

CMD         ["/usr/local/bin/unit_lint.sh"]

FROM        dev AS format

COPY        --chown=worker tests $APP_HOME/tests
COPY        --chown=worker build/.php-cs-fixer.dist.php $APP_HOME/build/

USER        root
COPY        build/bin/format.sh /usr/local/bin/

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

FROM        base AS update-lockfile

# Re-generate composer.lock
COPY        --chown=worker build/bin/update_lockfile.sh $APP_HOME/

ENTRYPOINT  ["/var/app/update_lockfile.sh"]
