FROM php:8.4-fpm AS base

RUN mkdir -p /tmp /run/php \
    && chmod 1777 /tmp \
    && chown www-data:www-data /run/php

RUN apt-get update && apt-get install -y --no-install-recommends \
        git curl unzip \
        zlib1g-dev libpng-dev libzip-dev libjpeg62-turbo-dev libfreetype6-dev \
        libicu-dev libonig-dev \
        ghostscript libmagickwand-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) \
        bcmath exif gd intl mbstring opcache pcntl pdo_mysql zip \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && rm -rf /var/lib/apt/lists/*

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY docker/php/custom.ini "$PHP_INI_DIR/conf.d/zz-custom.ini"
COPY docker/php/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf

WORKDIR /app

FROM base AS builder

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
    && apt-get install -y --no-install-recommends nodejs \
    && rm -rf /var/lib/apt/lists/*

COPY composer.json composer.lock package.json package-lock.json ./
RUN composer install --no-dev --prefer-dist --no-interaction --no-scripts --no-autoloader \
    && npm ci

COPY --chown=www-data:www-data . /app

RUN composer dump-autoload --optimize --no-dev --no-scripts \
    && echo "APP_KEY=base64:$(openssl rand -base64 32)" > .env \
    && php artisan package:discover --ansi \
    && php artisan config:clear \
    && npm run build \
    && rm -f .env \
    && rm -rf node_modules /root/.npm /tmp/*

FROM base AS runtime

RUN apt-get update && apt-get install -y --no-install-recommends \
        nginx supervisor curl \
    && rm -rf /var/lib/apt/lists/* \
    && rm -f /etc/nginx/sites-enabled/default

COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh \
    && mkdir -p /var/log/supervisor

COPY --from=builder --chown=www-data:www-data /app /app

RUN mkdir -p \
        storage/framework/cache/data \
        storage/framework/sessions \
        storage/framework/views \
        storage/logs \
        bootstrap/cache \
    && chown -R www-data:www-data /app/storage /app/bootstrap/cache \
    && chmod -R 775 /app/storage /app/bootstrap/cache

EXPOSE 80

ENTRYPOINT ["entrypoint.sh"]
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
