# Dockerfile für PHP-FPM
FROM php:8.4-fpm AS base

# System-Abhängigkeiten: Werden selten geändert, daher ein eigener Layer
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    zip \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libwebp-dev \
    libavif-dev \
    libxpm-dev \
    && apt-get clean \
        && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-configure gd \
            --with-freetype \
            --with-jpeg \
            --with-webp \
            --with-avif \
            --with-xpm \
    && docker-php-ext-install -j$(nproc) gd

RUN docker-php-ext-install -j$(nproc) \
    zip \
    pdo \
    pdo_mysql \
    opcache \
    pcntl \
    posix \
    shmop

RUN pecl install apcu \
    && docker-php-ext-enable apcu

# Composer installieren
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer

# Installiere Xdebug nur im Entwicklungsmodus
ARG ENV=prod
RUN if [ "$ENV" = "dev" ]; then \
    pecl install xdebug \
    && docker-php-ext-enable xdebug; \
    fi

WORKDIR /var/www/html

# Kopiere composer.json
COPY composer.json ./

# Kopiere composer.lock falls vorhanden (robuste Lösung)
COPY composer.loc[k] ./

# Falls keine composer.lock existiert, erstelle eine leere um Layer-Caching zu ermöglichen
RUN [ ! -f composer.lock ] && touch composer.lock || true

# Remove potentially corrupted composer.lock and install dependencies
RUN rm -f composer.lock && \
    if [ "$ENV" = "prod" ]; then \
        composer install --no-dev --no-scripts --no-autoloader --optimize-autoloader; \
    else \
        composer install --no-scripts --no-autoloader; \
    fi

# Kopiere PHP-Konfigurationen
COPY docker/php/php.common.ini /usr/local/etc/php/php.common.ini
COPY docker/php/php.${ENV}.ini /usr/local/etc/php/php.ini

# Wenn dev, kopiere auch xdebug-Konfiguration
RUN if [ "$ENV" = "dev" ]; then \
    mkdir -p /usr/local/etc/php/conf.d/; \
    fi
COPY docker/php/xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

# Kopiere den Rest des Projekts
COPY . .

# Optimiere Autoloader
RUN composer dump-autoload --optimize

# <<--- ALLE zusätzlichen System-Dateien und chmod noch als root!
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

# Danach erst den Nutzer wechseln!
RUN groupadd -g 1000 appuser && useradd -u 1000 -g appuser -m appuser
RUN chown -R appuser:appuser /var/www/html

USER appuser

RUN mkdir -p /var/www/html/cache && \
    chown -R 1000:1000 /var/www/html/cache && \
    chmod -R 775 /var/www/html/cache

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["php-fpm"]
