FROM alpine:3.21

ENV ACTINIA_BUILD_PACKAGES="\
    gcc \
    geos-dev \
    git \
    linux-headers \
    musl-dev \
    python3-dev \
    "

ENV ACTINIA_REQUIREMENTS_WHEEL_PACKAGES="\
    cython \
    gdal-tools \
    # following for geopandas
    build-base \
    gdal-dev \
    musl-dev \
    proj-dev \
    proj-util \
    python3-dev \
    py3-numpy-dev \
    "

ENV SNAPPY_RUNTIME_PACKAGES="\
    python3 \
    openjdk11 \
    "

ENV PDAL_RUNTIME_PACKAGES="\
    curl \
    jsoncpp \
    laszip \
    libunwind \
    gdal \
    geos \
    libgeotiff \
    libxml2 \
    postgresql \
    python3 \
    sqlite \
    "

# Keep basic packages for simple debugging
ENV GRASS_RUNTIME_BASIC_PACKAGES="gdal python3 zstd-libs"
ENV GRASS_RUNTIME_PACKAGES="\
    cairo \
    fftw \
    flex \
    gdal \
    gdal-driver-HDF5 \
    gdal-driver-JP2OpenJPEG \
    gdal-driver-netCDF \
    gdal-driver-PG \
    gdal-driver-WMS \
    geos \
    libpng \
    openjpeg \
    postgresql \
    pdal \
    proj \
    proj-util \
    python3 \
    sqlite \
    sqlite-libs \
    zstd-libs \
    "

ENV GRASS_ADDONS_BUILD_PACKAGES="\
    build-base \
    cairo \
    fftw-dev \
    gcc \
    geos-dev \
    git \
    make \
    postgresql-dev \
    py3-numpy-dev \
    subversion \
    "

ENV ACTINIA_PLUGIN_INSTALL_PACKAGES="\
    curl \
    jq \
    python3-dev \
    "

ENV GOOGLE_CLOUD_BIGQUERY_PACKAGES="\
    libffi-dev \
    "

# coreutils is needed for 'du -sb' e.g. download_cache
# (installed du is from busybox)
ENV ACTINIA_RUNTIME_PACKAGES="\
    coreutils \
    rsync \
    py3-shapely \
    py3-rasterio \
    py3-scikit-learn \
    valkey-cli \
    zip \
    "

RUN apk update; \
    apk add --no-cache \
        $ACTINIA_BUILD_PACKAGES \
        $ACTINIA_REQUIREMENTS_WHEEL_PACKAGES \
        $SNAPPY_RUNTIME_PACKAGES \
        $PDAL_RUNTIME_PACKAGES \
        $GRASS_RUNTIME_PACKAGES \
        $GRASS_ADDONS_BUILD_PACKAGES \
        $ACTINIA_PLUGIN_INSTALL_PACKAGES \
        $GOOGLE_CLOUD_BIGQUERY_PACKAGES \
        $ACTINIA_RUNTIME_PACKAGES

ENV PATH="/opt/venv/bin:$PATH"
RUN /usr/bin/python -m venv --system-site-packages --without-pip /opt/venv
RUN python -m ensurepip && pip3 install --upgrade pip pep517 wheel

# Do not sort alphabetically as some depend on others
ENV ADDITIONAL_PYTHON_PACKAGES="\
    ply \
    six \
    python-dateutil \
    pillow \
    scipy \
    joblib \
    threadpoolctl \
    scikit-learn \
    pyproj>=3.6.1 \
    pyroSAR \
    "
# Fix for scikit-learn segmentation fault error
# TODO: check if this can be removed in future
# RUN apk add openblas openblas-dev lapack-dev
RUN pip3 install --upgrade $ADDITIONAL_PYTHON_PACKAGES

# Install actinia dependencies
# Duplicated in final images, only here to safe time
RUN pip3 install actinia-core && pip3 uninstall actinia-core -y
