FROM php:8.4-fpm

# --- System packages ---
# chromium + its runtime libs are pulled in automatically by apt on Debian;
# this is what backs Spatie\Browsershot (used across Modules/Reports for PDF exports).
RUN apt-get update && apt-get install -y --no-install-recommends \
        git unzip zip curl gnupg default-mysql-client \
        libzip-dev libpng-dev libjpeg62-turbo-dev libfreetype6-dev libicu-dev libonig-dev \
        chromium \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j"$(nproc)" pdo_mysql mbstring exif pcntl bcmath gd intl zip \
    && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
    && apt-get install -y --no-install-recommends nodejs \
    && ln -sf /usr/bin/node /usr/local/bin/node \
    && ln -sf /usr/bin/npm /usr/local/bin/npm \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Chromium's sandbox needs kernel features that are usually unavailable in containers.
# Wrap the real binary so every Browsershot call (they don't pass ->noSandbox()) gets
# --no-sandbox automatically, without touching ReportController.
RUN mv /usr/bin/chromium /usr/bin/chromium.real \
    && printf '#!/bin/sh\nexec /usr/bin/chromium.real --no-sandbox --disable-gpu "$@"\n' > /usr/bin/chromium \
    && chmod +x /usr/bin/chromium

ENV PUPPETEER_SKIP_DOWNLOAD=true
ENV PUPPETEER_SKIP_CHROME_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

COPY docker/php-dev.ini /usr/local/etc/php/conf.d/zz-dev.ini
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["entrypoint.sh"]
CMD ["php-fpm"]
