# syntax=docker/dockerfile:1

FROM php:8.3-fpm-bookworm AS php-base

ARG APP_UID=1000
ARG APP_GID=1000

ENV APP_ENV=production \
    APP_DEBUG=false \
    COMPOSER_ALLOW_SUPERUSER=1

WORKDIR /var/www/html

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        libfcgi-bin \
        libfreetype6-dev \
        libicu-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libzip-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j"$(nproc)" \
        bcmath \
        exif \
        gd \
        intl \
        pcntl \
        pdo_mysql \
        sockets \
        zip \
    && apt-mark manual \
        libfcgi-bin \
        libfreetype6 \
        libicu72 \
        libjpeg62-turbo \
        libpng16-16 \
        libzip4 \
    && apt-get purge -y --auto-remove \
        libfreetype6-dev \
        libicu-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libzip-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && groupadd --gid "$APP_GID" app \
    && useradd --uid "$APP_UID" --gid "$APP_GID" --create-home --shell /usr/sbin/nologin app

COPY docker/production/php.ini /usr/local/etc/php/conf.d/99-production.ini
COPY docker/production/php-fpm-pool.conf /usr/local/etc/php-fpm.d/zz-production.conf

FROM php-base AS vendor

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

RUN composer install \
        --no-dev \
        --prefer-dist \
        --optimize-autoloader \
        --no-interaction \
        --no-progress \
    && composer clear-cache

FROM node:24-bookworm-slim AS frontend

WORKDIR /var/www/html

COPY package.json package-lock.json ./
RUN npm ci --no-audit --no-fund

COPY resources ./resources
COPY public ./public
COPY vite.config.* ./

ARG VITE_APP_NAME=Moonwell
ENV VITE_APP_NAME="$VITE_APP_NAME"

RUN npm run build

FROM php-base AS app

COPY --from=vendor --chown=app:app /var/www/html /var/www/html
COPY --from=frontend --chown=app:app /var/www/html/public/build /var/www/html/public/build

RUN mkdir -p \
        bootstrap/cache \
        storage/app/public \
        storage/framework/cache/data \
        storage/framework/sessions \
        storage/framework/views \
        storage/logs \
    && chown -R app:app bootstrap/cache storage

EXPOSE 9000

CMD ["php-fpm", "--nodaemonize"]

FROM nginx:1.27-alpine AS web

ARG APP_UID=1000
ARG APP_GID=1000

RUN addgroup -S -g "$APP_GID" app \
    && adduser -S -D -H -u "$APP_UID" -G app app

COPY docker/production/nginx.conf /etc/nginx/nginx.conf
COPY --from=vendor --chown=app:app /var/www/html/public /var/www/html/public
COPY --from=frontend --chown=app:app /var/www/html/public/build /var/www/html/public/build

USER app

EXPOSE 8080

CMD ["nginx", "-g", "daemon off;"]
