FROM 086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:debian13-php82 AS base

USER root

RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    git \
    unzip \
    zip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

ENV APP_HOME=/var/app
RUN mkdir -p "$APP_HOME" \
    && chown -R worker:worker "$APP_HOME"

WORKDIR $APP_HOME
USER worker

#######################################
### Build image for composer update ###
#######################################
FROM base AS deps-update

USER root
COPY composer.json ./
COPY scripts/update_composer_lock.sh ./scripts/

USER worker
ENTRYPOINT ["./scripts/update_composer_lock.sh"]

FROM base AS dev-deps-install
WORKDIR $APP_HOME
USER root

COPY composer.json \
    .php-cs-fixer.dist.php .phpcs.xml.dist phpstan.neon.dist phpunit.xml ./

USER worker
RUN --mount=type=secret,id=github_auth,required,target=$APP_HOME/auth.json,uid=1010,gid=1010,mode=0400 \
    composer install --no-interaction --prefer-dist --optimize-autoloader \
    && composer dump-autoload --optimize

FROM dev-deps-install AS code

COPY src/ ./src
COPY tests/ ./tests

###################################
### Build image for code-format ###
###################################
FROM code AS code-format
CMD ["composer", "format"]

#################################
### Build image for unit-lint ###
#################################
FROM code AS unit-lint

USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
    php8.2-xdebug \
    && apt-get -y clean \
    && rm -rf /var/lib/apt/lists/*

ENV XDEBUG_MODE="coverage"

COPY scripts/lint-and-test.sh ./scripts/

USER worker
CMD ["composer", "lint-and-test"]
