# ============================================================================
# PROCP — Production image (PRC-866)
# Batteries-included: PHP 8.3-fpm + nginx + supervisor. Tek imaj; rol
# (app/worker/scheduler/reverb) docker-compose command override ile seçilir.
# Build: docker build -f docker/prod/Dockerfile -t procp:latest .
# ============================================================================

# --- Stage 1: frontend asset build (vite → public/build) -------------------
FROM node:22-bookworm-slim AS assets
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci --no-audit --no-fund || npm install --no-audit --no-fund
COPY vite.config.js ./
COPY resources ./resources
COPY public ./public
RUN npm run build

# --- Stage 2: composer / PHP bağımlılıkları --------------------------------
FROM composer:2 AS vendor
WORKDIR /app
COPY composer.json composer.lock ./
# --no-scripts: artisan henüz yok; autoload+paketler yeterli, script'ler runtime'da.
# --ignore-platform-reqs (PRC-1129): çok-aşamalı build — composer:2 imajının PHP'si
# runtime (Stage 3) değil; eklentiler (ext-ftp vb.) orada sağlanır. Composer burada
# yalnız lock'tan vendor'ı assemble eder; platform-check'i çalıştırmak league/flysystem-ftp
# gibi runtime-eklenti gerektiren paketlerde build'i kırıyordu.
RUN composer install --no-dev --no-scripts --prefer-dist --no-interaction --optimize-autoloader --ignore-platform-reqs

# --- Stage 3: runtime (php-fpm + nginx + supervisor) -----------------------
FROM php:8.3-fpm-bookworm AS runtime

# Sistem paketleri + PHP eklenti derleme bağımlılıkları
RUN apt-get update && apt-get install -y --no-install-recommends \
        nginx supervisor gosu \
        libpng-dev libjpeg62-turbo-dev libfreetype6-dev \
        libzip-dev libicu-dev libxml2-dev libonig-dev \
        libc-client-dev libkrb5-dev libldap2-dev \
        libmagickwand-dev \
        curl ca-certificates git unzip \
    && rm -rf /var/lib/apt/lists/*

# Core PHP eklentileri
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
    && docker-php-ext-configure ldap --with-libdir=lib/$(dpkg-architecture -q DEB_HOST_MULTIARCH) \
    && docker-php-ext-install -j"$(nproc)" \
        pdo_mysql mysqli gd zip bcmath intl soap imap ldap exif opcache pcntl ftp

# PECL eklentileri (redis, imagick, igbinary)
RUN pecl install redis imagick igbinary \
    && docker-php-ext-enable redis imagick igbinary

# ionCube Loader (encoded release'leri çalıştırmak için — PRC-868/877)
RUN set -eux; \
    cd /tmp; \
    curl -fsSL https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz -o ioncube.tgz; \
    tar -xzf ioncube.tgz; \
    PHP_EXT_DIR="$(php -i | grep '^extension_dir' | awk '{print $3}')"; \
    cp "ioncube/ioncube_loader_lin_8.3.so" "$PHP_EXT_DIR/"; \
    printf 'zend_extension=ioncube_loader_lin_8.3.so\n' > /usr/local/etc/php/conf.d/00-ioncube.ini; \
    rm -rf /tmp/ioncube /tmp/ioncube.tgz

WORKDIR /var/www/html

# Uygulama kodu + build çıktıları + vendor
COPY . /var/www/html
COPY --from=assets   /app/public/build /var/www/html/public/build
COPY --from=vendor   /app/vendor       /var/www/html/vendor

# Prod config dosyaları
COPY docker/prod/nginx.conf        /etc/nginx/sites-available/default
COPY docker/prod/php-prod.ini      /usr/local/etc/php/conf.d/zz-procp.ini
COPY docker/prod/supervisord.conf  /etc/supervisor/conf.d/procp.conf
COPY docker/prod/entrypoint.sh     /usr/local/bin/entrypoint
RUN chmod +x /usr/local/bin/entrypoint \
    && ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default \
    && rm -f /etc/nginx/sites-enabled/default.dpkg-dist 2>/dev/null || true

# İzinler: storage + bootstrap/cache yazılabilir (www-data)
RUN mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache \
    && chown -R www-data:www-data storage bootstrap/cache \
    && chmod -R 775 storage bootstrap/cache

EXPOSE 80
ENTRYPOINT ["entrypoint"]
# Varsayılan rol = web (app). worker/scheduler/reverb compose'da override edilir.
CMD ["supervisord", "-c", "/etc/supervisor/conf.d/procp.conf"]
