ARG EGEYA_VERSION=4199
ARG EGEYA_URL=""
ARG EGEYA_SHA256=""

FROM debian:bookworm-slim AS egeya-source

ARG EGEYA_VERSION
ARG EGEYA_URL
ARG EGEYA_SHA256

RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends ca-certificates curl unzip; \
    rm -rf /var/lib/apt/lists/*; \
    archive_url="${EGEYA_URL:-https://blogengine.ru/download/e2_distr_v${EGEYA_VERSION}.zip}"; \
    work_dir="$(mktemp -d)"; \
    curl -fL \
        --retry 5 \
        --retry-delay 2 \
        --connect-timeout 20 \
        --user-agent "egeya-docker/${EGEYA_VERSION}" \
        "$archive_url" \
        -o "$work_dir/egeya.zip"; \
    if [ -n "$EGEYA_SHA256" ]; then \
        echo "$EGEYA_SHA256  $work_dir/egeya.zip" | sha256sum -c -; \
    fi; \
    mkdir -p "$work_dir/unpacked" /opt/egeya-release; \
    unzip -q "$work_dir/egeya.zip" -d "$work_dir/unpacked"; \
    if [ -f "$work_dir/unpacked/index.php" ]; then \
        source_dir="$work_dir/unpacked"; \
    else \
        source_dir="$(find "$work_dir/unpacked" -maxdepth 2 -type f -name index.php -printf '%h\n' | head -n 1)"; \
    fi; \
    test -n "$source_dir"; \
    cp -a "$source_dir"/. /opt/egeya-release/; \
    test -f /opt/egeya-release/index.php; \
    rm -rf "$work_dir"

FROM php:8.2-fpm-bookworm AS php

ENV EGEYA_ROOT=/var/www/html \
    EGEYA_DATA_DIR=/var/www/egeya-data \
    EGEYA_DEFAULTS_DIR=/opt/egeya-defaults

RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        libavif-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libonig-dev \
        libpng-dev \
        libwebp-dev \
        libzip-dev \
        pkg-config; \
    docker-php-ext-configure gd \
        --with-avif \
        --with-freetype \
        --with-jpeg \
        --with-webp; \
    docker-php-ext-install -j"$(nproc)" \
    exif \
    gd \
    mbstring \
    mysqli \
    opcache \
    pdo_mysql \
    zip; \
    mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"; \
    rm -rf /var/lib/apt/lists/*

COPY --from=egeya-source /opt/egeya-release/ /var/www/html/

RUN set -eux; \
    mkdir -p "$EGEYA_DEFAULTS_DIR/user" "$EGEYA_DEFAULTS_DIR/pictures"; \
    if [ -d "$EGEYA_ROOT/user" ]; then \
        cp -a "$EGEYA_ROOT/user"/. "$EGEYA_DEFAULTS_DIR/user"/; \
    fi; \
    if [ -d "$EGEYA_ROOT/pictures" ]; then \
        cp -a "$EGEYA_ROOT/pictures"/. "$EGEYA_DEFAULTS_DIR/pictures"/; \
    fi; \
    rm -rf "$EGEYA_ROOT/user" "$EGEYA_ROOT/pictures"; \
    ln -s "$EGEYA_DATA_DIR/user" "$EGEYA_ROOT/user"; \
    ln -s "$EGEYA_DATA_DIR/pictures" "$EGEYA_ROOT/pictures"; \
    chown -R www-data:www-data "$EGEYA_ROOT" "$EGEYA_DEFAULTS_DIR"

COPY docker/php/egeya-entrypoint.sh /usr/local/bin/egeya-entrypoint
COPY docker/php/www-egeya.conf /usr/local/etc/php-fpm.d/zz-egeya.conf

RUN chmod 0755 /usr/local/bin/egeya-entrypoint

WORKDIR /var/www/html

EXPOSE 9000

HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
    CMD php -r '$s=@fsockopen("127.0.0.1",9000,$e,$m,2); if(!$s){exit(1);} fclose($s);'

ENTRYPOINT ["egeya-entrypoint"]
CMD ["php-fpm"]

FROM nginx:1.28-bookworm AS nginx

ENV EGEYA_ROOT=/var/www/html \
    EGEYA_DATA_DIR=/var/www/egeya-data

RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends curl; \
    rm -rf /var/lib/apt/lists/*; \
    if getent passwd www-data >/dev/null; then \
        sed -ri 's/^user[[:space:]]+[^;]+;/user www-data;/' /etc/nginx/nginx.conf; \
    fi

COPY --from=egeya-source /opt/egeya-release/ /var/www/html/

RUN set -eux; \
    rm -rf "$EGEYA_ROOT/user" "$EGEYA_ROOT/pictures"; \
    ln -s "$EGEYA_DATA_DIR/user" "$EGEYA_ROOT/user"; \
    ln -s "$EGEYA_DATA_DIR/pictures" "$EGEYA_ROOT/pictures"; \
    rm -f /etc/nginx/conf.d/default.conf

COPY docker/nginx/egeya.conf.template /etc/nginx/templates/egeya.conf.template

WORKDIR /var/www/html

EXPOSE 80

HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
    CMD curl -fsS http://127.0.0.1/ >/dev/null || exit 1
