FROM composer:2 AS composer-dependencies

WORKDIR /app

COPY composer.json composer.lock ./

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

FROM node:22-bookworm-slim AS frontend-assets

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm ci

COPY resources ./resources
COPY public ./public
COPY vite.config.js ./

RUN npm run build

FROM php:8.4-cli AS certification-runtime

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        libicu-dev \
        libpq-dev \
        libxml2-dev \
        libzip-dev \
    && docker-php-ext-install \
        bcmath \
        intl \
        pdo_pgsql \
        pgsql \
        soap \
        sockets \
        zip \
    && apt-get purge -y --auto-remove \
        libicu-dev \
        libpq-dev \
        libxml2-dev \
        libzip-dev \
    && rm -rf /var/lib/apt/lists/*

RUN groupadd --gid 1000 haus \
    && useradd --uid 1000 --gid haus --create-home --shell /usr/sbin/nologin haus

WORKDIR /var/www/html

COPY --chown=haus:haus . ./
COPY --chown=haus:haus --from=composer-dependencies /app/vendor ./vendor
COPY --chown=haus:haus --from=frontend-assets /app/public/build ./public/build

RUN mkdir -p \
        bootstrap/cache \
        storage/app/private/signing \
        storage/framework/cache/data \
        storage/framework/sessions \
        storage/framework/views \
        storage/logs \
    && chown -R haus:haus bootstrap/cache storage \
    && chmod 700 storage/app/private storage/app/private/signing \
    && chmod -R u+rwX,g-rwx,o-rwx storage bootstrap/cache

USER haus

EXPOSE 8000

CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
