FROM php:8.3-fpm-bookworm

ENV COMPOSER_ALLOW_SUPERUSER=1 \
    DEBIAN_FRONTEND=noninteractive

# Debian/Bookworm is intentionally used instead of Alpine here.
# It is slightly larger, but considerably more predictable for the PHP
# extensions required by PDF generation, XLSX imports and PostgreSQL.
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        bash \
        ca-certificates \
        curl \
        git \
        unzip \
        libcurl4-openssl-dev \
        libfreetype6-dev \
        libicu-dev \
        libjpeg62-turbo-dev \
        libonig-dev \
        libpng-dev \
        libpq-dev \
        libwebp-dev \
        libxml2-dev \
        libzip-dev \
        $PHPIZE_DEPS; \
    docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp; \
    docker-php-ext-install -j2 \
        bcmath \
        curl \
        dom \
        gd \
        intl \
        mbstring \
        pcntl \
        pdo_pgsql \
        simplexml \
        xml \
        xmlreader \
        xmlwriter \
        zip; \
    pecl install redis; \
    docker-php-ext-enable redis; \
    php -m | grep -E '^(bcmath|curl|dom|gd|intl|mbstring|pcntl|pdo_pgsql|redis|SimpleXML|xml|xmlreader|xmlwriter|zip)$' >/tmp/php-modules.txt; \
    rm -rf /tmp/pear ~/.pearrc /var/lib/apt/lists/*

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

WORKDIR /var/www/html

# Copy Composer metadata first so dependency downloads can be cached.
COPY composer.json ./composer.json

RUN composer install \
    --no-dev \
    --no-scripts \
    --no-autoloader \
    --no-interaction \
    --prefer-dist

COPY . .

RUN composer install \
        --no-dev \
        --no-interaction \
        --prefer-dist \
        --optimize-autoloader \
    && mkdir -p \
        storage/app/private \
        storage/framework/cache \
        storage/framework/sessions \
        storage/framework/views \
        storage/logs \
        bootstrap/cache \
    && chown -R www-data:www-data storage bootstrap/cache

USER www-data

CMD ["php-fpm"]
