# =============================================================
#  urlshort-qr-gen – Apache + mod_php
#  Bewusst dasselbe Setup wie klassisches Shared Hosting, damit
#  sich Docker und FTP-Deployment identisch verhalten (.htaccess).
# =============================================================

FROM php:8.3-apache

# --- Systempakete & PHP-Erweiterungen -------------------------
# gd        -> PNG-Ausgabe der QR-Codes
# intl      -> Umlaut-Domains (IDN) nach UTS-46; optional, es gibt einen
#              eigenen Punycode-Rueckfallweg fuer Hosting ohne intl
# pdo_mysql -> optionaler MySQL/MariaDB-Betrieb (SQLite ist eingebaut)
# imagick   -> rastert SVG-Logos fuer die PNG-Ausgabe (optional)
#
# Die Entwicklungspakete bleiben absichtlich installiert: beim Aufraeumen
# mit "apt-get purge --auto-remove" verschwindet sonst auch die von
# imagick benoetigte Laufzeitbibliothek libMagickWand. Das Image ist
# dadurch groesser, aber die Erweiterungen laden zuverlaessig.
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        libpng-dev libjpeg62-turbo-dev libfreetype6-dev \
        libzip-dev libicu-dev libmagickwand-dev unzip; \
    docker-php-ext-configure gd --with-freetype --with-jpeg; \
    docker-php-ext-install -j"$(nproc)" gd intl pdo_mysql zip; \
    { pecl install imagick && docker-php-ext-enable imagick; } || \
        echo "Hinweis: imagick konnte nicht installiert werden – SVG-Logos wirken dann nur im SVG-Download."; \
    rm -rf /var/lib/apt/lists/* /tmp/pear; \
    php -m | grep -q '^gd$'; \
    php -m | grep -q '^pdo_mysql$'

# --- Apache ---------------------------------------------------
RUN set -eux; \
    a2enmod rewrite headers expires; \
    sed -ri 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf; \
    printf '%s\n' \
        '<Directory /var/www/html/public>' \
        '    Options -Indexes +FollowSymLinks' \
        '    AllowOverride All' \
        '    Require all granted' \
        '</Directory>' \
        'ServerTokens Prod' \
        'ServerSignature Off' \
        > /etc/apache2/conf-available/urlshort.conf; \
    a2enconf urlshort

COPY docker/php.ini /usr/local/etc/php/conf.d/urlshort.ini

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

WORKDIR /var/www/html

# Abhaengigkeiten zuerst: bleibt beim Aendern des Codes im Cache.
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-interaction --no-progress --optimize-autoloader --no-scripts

COPY . .

RUN set -eux; \
    mkdir -p data/uploads; \
    chown -R www-data:www-data data; \
    chmod -R 775 data

COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

EXPOSE 80

HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
    CMD php -r 'exit(@file_get_contents("http://127.0.0.1/login") === false ? 1 : 0);'

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["apache2-foreground"]
