# Ecclesia Ledger production image: PHP-FPM + nginx + queue worker + scheduler under supervisord.
# Build:  docker build -t ecclesia-ledger .
# Run:    docker compose up -d   (see docker-compose.yml and docs/DEPLOYMENT.md)

# ---- 1. Front-end assets ------------------------------------------------------------------------
FROM node:20-alpine AS assets
WORKDIR /app
COPY package.json package-lock.json vite.config.js ./
RUN npm ci --no-audit --no-fund
COPY resources ./resources
COPY public ./public
RUN npm run build

# ---- 2. PHP dependencies (no dev tools in production) -------------------------------------------
FROM composer:2 AS vendor
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-scripts --no-interaction --prefer-dist --optimize-autoloader --ignore-platform-reqs

# ---- 3. Runtime ----------------------------------------------------------------------------------
FROM php:8.2-fpm-alpine
RUN apk add --no-cache nginx supervisor mariadb-client tzdata icu-libs libzip libpng libjpeg-turbo freetype \
 && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS icu-dev libzip-dev libpng-dev libjpeg-turbo-dev freetype-dev \
 && docker-php-ext-configure gd --with-freetype --with-jpeg \
 && docker-php-ext-install -j"$(nproc)" pdo_mysql bcmath intl zip gd opcache \
 && pecl install redis && docker-php-ext-enable redis \
 && apk del .build-deps \
 && mkdir -p /run/nginx

ENV TZ=Africa/Lagos \
    QUEUE_DRAIN_VIA_SCHEDULER=false

WORKDIR /var/www/html
COPY --chown=www-data:www-data . .
COPY --from=vendor --chown=www-data:www-data /app/vendor ./vendor
COPY --from=assets --chown=www-data:www-data /app/public/build ./public/build
COPY docker/nginx.conf /etc/nginx/http.d/default.conf
COPY docker/php.ini /usr/local/etc/php/conf.d/zz-app.ini
COPY docker/supervisord.conf /etc/supervisord.conf
COPY docker/entrypoint.sh /usr/local/bin/entrypoint
RUN chmod +x /usr/local/bin/entrypoint \
 && rm -f bootstrap/cache/*.php \
 && chown -R www-data:www-data storage bootstrap/cache

EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=40s CMD wget -qO- http://127.0.0.1:8080/up || exit 1
ENTRYPOINT ["entrypoint"]
CMD ["supervisord", "-c", "/etc/supervisord.conf"]
