# syntax=docker/dockerfile:1

ARG PHP_VERSION=8.4

########## Étape 1 : dépendances Composer ##########
FROM composer:2 AS vendor
WORKDIR /app
# Fichiers de dépendances seuls : cette couche reste en cache tant que le lock ne change pas
COPY composer.json composer.lock symfony.lock ./
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist --no-interaction
# Code source, puis autoloader optimisé et .env compilé pour la prod
COPY . .
RUN composer dump-autoload --no-dev --classmap-authoritative \
 && composer dump-env prod

########## Étape 2 : runtime PHP-FPM ##########
FROM php:${PHP_VERSION}-fpm-alpine AS app
RUN docker-php-ext-install opcache pdo_mysql \
 && mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY docker/php/opcache.ini "$PHP_INI_DIR/conf.d/zz-opcache.ini"
WORKDIR /app
# Code en lecture seule (propriétaire root), seul var/ est inscriptible par www-data
COPY --from=vendor /app /app
RUN mkdir -p var && chown -R www-data:www-data var
ARG APP_VERSION=dev
ENV APP_ENV=prod APP_DEBUG=0 APP_VERSION=${APP_VERSION}
USER www-data
RUN php bin/console cache:warmup
EXPOSE 9000
CMD ["php-fpm"]

########## Étape 3 : serveur web Nginx devant PHP-FPM ##########
FROM nginxinc/nginx-unprivileged:1.30-alpine AS web
# Adresse de PHP-FPM injectée au démarrage (envsubst du point d'entrée officiel)
ENV PHP_FPM_ADDR=api:9000
COPY docker/nginx/default.conf.template /etc/nginx/templates/default.conf.template
COPY --from=vendor /app/public /app/public
EXPOSE 8080
