# docker/common/php-fpm/Dockerfile

# Stage 1: Build environment and Composer dependencies
FROM php:8.4-fpm AS builder

# Install system dependencies and PHP extensions required for Laravel + MySQL/PostgreSQL support
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    unzip \
    libpq-dev \
    libonig-dev \
    libssl-dev \
    libxml2-dev \
    libcurl4-openssl-dev \
    libicu-dev \
    libzip-dev \
    && docker-php-ext-install -j"$(nproc)" \
        pdo_mysql \
        pdo_pgsql \
        pgsql \
        opcache \
        intl \
        zip \
        bcmath \
        soap \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Arbeitsverzeichnis
WORKDIR /var/www

# Kompletten Code kopieren (für composer-Skripte wie artisan package:discover)
COPY . /var/www

# Composer installieren und Dependencies holen
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && composer install --no-dev --optimize-autoloader --no-interaction --no-progress --prefer-dist


# Stage 2: Development image (einziger Runtime-Stage)
FROM builder AS development

# Xdebug / Dev-Settings
ARG XDEBUG_ENABLED=true
ARG XDEBUG_MODE=develop,coverage,debug,profile
ARG XDEBUG_HOST=host.docker.internal
ARG XDEBUG_IDE_KEY=DOCKER
ARG XDEBUG_LOG=/dev/stdout
ARG XDEBUG_LOG_LEVEL=0

# User/Group-IDs für die Rechte-Synchronisierung
ARG UID=1000
ARG GID=1000

USER root

# Xdebug konfigurieren, falls aktiviert
RUN if [ "${XDEBUG_ENABLED}" = "true" ]; then \
    pecl install xdebug && \
    docker-php-ext-enable xdebug && \
    { \
      echo "xdebug.mode=${XDEBUG_MODE}"; \
      echo "xdebug.idekey=${XDEBUG_IDE_KEY}"; \
      echo "xdebug.log=${XDEBUG_LOG}"; \
      echo "xdebug.log_level=${XDEBUG_LOG_LEVEL}"; \
      echo "xdebug.client_host=${XDEBUG_HOST}"; \
      echo "xdebug.start_with_request=yes"; \
    } >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ; \
  fi

# User/Gruppe anlegen (oder existierende Gruppe wiederverwenden)
RUN if getent group "${GID}" >/dev/null; then \
      group_name="$(getent group "${GID}" | cut -d: -f1)"; \
      useradd -m -u "${UID}" -g "${GID}" -s /bin/bash www; \
    else \
      groupadd -g "${GID}" www && \
      useradd -m -u "${UID}" -g www -s /bin/bash www; \
      group_name=www; \
    fi \
    && sed -i "s/user = www-data/user = www/g" /usr/local/etc/php-fpm.d/www.conf \
    && sed -i "s/group = www-data/group = ${group_name}/g" /usr/local/etc/php-fpm.d/www.conf

# Arbeitsverzeichnis
WORKDIR /var/www

# neuen Entry-Point für Dev-Container verwenden
COPY ./docker/php-fpm/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

# Zurück auf unprivilegierten User
USER www

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

EXPOSE 9000
CMD ["php-fpm"]
