# =========================
#  Base PHP (extensions)
# =========================
FROM php:8.2-fpm-bullseye AS base

# OS deps pour extensions/binaries
RUN apt-get update && apt-get install -y --no-install-recommends \
    git unzip curl pkg-config autoconf g++ make \
    libssl-dev libzip-dev librabbitmq-dev \
    libicu-dev libpng-dev libxml2-dev libxslt-dev \
    libonig-dev libjpeg62-turbo-dev libfreetype6-dev libwebp-dev \
    supervisor cron \
 && rm -rf /var/lib/apt/lists/*

# Extensions PHP usuelles Symfony
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
 && docker-php-ext-configure intl \
 && docker-php-ext-install -j"$(nproc)" pdo pdo_mysql zip intl gd opcache

# PECL (amqp pour Messenger, redis pour sessions/cache)
RUN pecl install amqp redis \
 && docker-php-ext-enable amqp redis

# Composer
RUN curl -sS https://getcomposer.org/installer | php -- \
    --install-dir=/usr/local/bin --filename=composer

WORKDIR /var/www


# =========================
#  Build Composer (vendor)
# =========================
FROM base AS build

# 1) Cache Composer
COPY composer.json composer.lock* ./

# 2) Install SANS scripts (pas de cache:clear, etc.)
RUN COMPOSER_ALLOW_SUPERUSER=1 COMPOSER_MEMORY_LIMIT=-1 \
    composer install --no-dev --prefer-dist --no-progress --no-interaction --no-scripts

# 3) Code applicatif
COPY . /var/www

# 4) Autoload optimisé (toujours sans scripts)
RUN COMPOSER_ALLOW_SUPERUSER=1 COMPOSER_MEMORY_LIMIT=-1 \
    composer dump-autoload --classmap-authoritative --no-dev --no-interaction


# =========================
#  Build Assets (Node)
# =========================
FROM node:20-alpine AS assets
WORKDIR /app

# 1) Dépendances JS : tolérant à l’absence de lock
#    - si package-lock.json présent -> npm ci
#    - sinon -> npm install
COPY package*.json ./
RUN sh -lc 'if [ -f package-lock.json ]; then npm ci; else npm install; fi'

# 2) Sources front (adapte si tes fichiers sont ailleurs)
#    On copie le strict nécessaire pour éviter d’invalider le cache
COPY assets/ ./assets/
# Si tu as aussi des styles ou autres sources:
# COPY styles/ ./styles/
# COPY adminto/ ./adminto/
# 3) Fichier(s) de config d’outil (Encore, webpack, vite…)
#    Adapte le nom si tu utilises Vite: vite.config.js
COPY webpack.config.js ./

# 4) Build
RUN npm run build

# Résultat attendu : /app/public/build + manifest.json


# =========================
#  Runtime (image finale)
# =========================
FROM base AS runtime

ENV APP_ENV=prod \
    APP_DEBUG=0

# Entrypoint (fourni par ton repo) — pas de warmup à l’intérieur
# Assure-toi que ce script lance juste php-fpm pour APP_ROLE=web,
# et supervisord pour APP_ROLE=worker, sans échouer si cron absent.
COPY docker/stack/php/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

# Code + vendor
COPY --from=build /var/www /var/www

# Assets compilés
COPY --from=assets /app/public/build /var/www/public/build

# Dossiers Symfony (droits)
RUN mkdir -p /var/www/var/cache /var/www/var/log /var/www/var/sessions \
 && chown -R www-data:www-data /var/www/var

WORKDIR /var/www

# Le process principal est géré par entrypoint (web: php-fpm, worker: supervisord)
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]