FROM oven/bun:1.3.14-alpine AS bun

# ============================================================
# Stage 1: PHP dependencies (Composer)
# ============================================================
FROM composer:2.9 AS vendor

WORKDIR /app

COPY composer.json composer.lock ./
COPY Modules/ ./Modules/

RUN docker-php-ext-install exif

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

# ============================================================
# Stage 2: Frontend build (PHP + Bun + Vite)
# ============================================================
FROM vendor AS frontend

COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
RUN ln -s /usr/local/bin/bun /usr/local/bin/bunx

COPY package.json bun.lock ./
RUN bun install --frozen-lockfile

COPY . .
RUN php artisan route:clear && bun run build

# ============================================================
# Stage 3: Production runtime (FrankenPHP)
# ============================================================
FROM dunglas/frankenphp:php8.5-bookworm AS production

ENV SERVER_NAME=:80 \
    SERVER_ROOT=public/

RUN install-php-extensions \
    pdo_pgsql \
    pdo_sqlite \
    gd \
    intl \
    zip \
    bcmath \
    exif \
    pcntl \
    opcache

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

COPY docker/php/production.ini docker/php/opcache.ini /usr/local/etc/php/conf.d/

WORKDIR /app

COPY --from=vendor /app/vendor ./vendor
COPY --from=frontend /app/public/build ./public/build
COPY . .

RUN chown -R www-data:www-data /app/storage /app/bootstrap/cache

COPY docker/scripts/entrypoint.sh /usr/local/bin/custom-entrypoint.sh
RUN sed -i 's/\r$//' /usr/local/bin/custom-entrypoint.sh \
    && chmod +x /usr/local/bin/custom-entrypoint.sh

EXPOSE 80 443 443/udp

CMD ["sh", "/usr/local/bin/custom-entrypoint.sh"]
