### ===============================
### STAGE 1: COMPOSER (PHP 8.3)
### ===============================
FROM dunglas/frankenphp:1-php8.3 AS composer

WORKDIR /app

# Install PHP extensions DULU
RUN apt-get update && apt-get install -y \
    libpng-dev libjpeg-dev libfreetype6-dev \
    libzip-dev libicu-dev pkg-config \
 && docker-php-ext-configure gd --with-freetype --with-jpeg \
 && docker-php-ext-install gd zip intl exif \
 && rm -rf /var/lib/apt/lists/*

# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-interaction


### ===============================
### STAGE 2: FRONTEND BUILD
### ===============================
FROM node:20-alpine AS frontend

WORKDIR /app

# Vendor DIBUTUHKAN oleh Filament
COPY --from=composer /app/vendor vendor

COPY package*.json ./
RUN npm install

COPY resources resources
COPY vite.config.* .
COPY tailwind.config.* .
COPY postcss.config.* .

RUN npm run build


### ===============================
### STAGE 3: RUNTIME
### ===============================
FROM dunglas/frankenphp:1-php8.3

ENV SERVER_NAME=":80"
WORKDIR /app

# PHP extensions runtime
RUN apt-get update && apt-get install -y \
    libpng-dev libjpeg-dev libfreetype6-dev \
    libzip-dev libicu-dev pkg-config \
 && docker-php-ext-configure gd --with-freetype --with-jpeg \
 && docker-php-ext-install gd pdo pdo_mysql zip bcmath intl exif \
 && rm -rf /var/lib/apt/lists/*

# App source
COPY . .

# Vendor & assets
COPY --from=composer /app/vendor vendor
COPY --from=frontend /app/public/build public/build

RUN php artisan optimize:clear
