ARG OPENGL_BASE_IMAGE="registry.apps.education.fr/iri/minetest/docker_test_harness/opengl:latest"
FROM alpine:latest AS compile

ARG MINETEST_VERSION=5.12.0
ARG MINETEST_GAME_VERSION=master
ARG LUAJIT_VERSION=v2.1

RUN apk add --no-cache git build-base cmake curl-dev zlib-dev zstd-dev \
		sqlite-dev postgresql-dev hiredis-dev leveldb-dev jpeg-dev libpng-dev \
		glfw-dev gmp-dev jsoncpp-dev libxi-dev libintl ninja ca-certificates \
		freetype-dev luajit-dev gettext sdl2-dev libogg-dev libvorbis-dev \
		openal-soft-dev mesa-dev       


WORKDIR /usr/src/
RUN git clone --recursive https://github.com/libspatialindex/libspatialindex && \
		cd libspatialindex && \
		cmake -B build \
			-DCMAKE_INSTALL_PREFIX=/usr/local && \
		cmake --build build && \
		cmake --install build && \
	cd /usr/src/ && \
	git clone --recursive https://luajit.org/git/luajit.git -b ${LUAJIT_VERSION} && \
		cd luajit && \
		make amalg && make install && \
	cd /usr/src/ && \
	git clone --depth=1 --single-branch --branch ${MINETEST_VERSION} -c advice.detachedHead=false https://github.com/luanti-org/luanti.git luanti && \
	rm -fr luanti/.git && \
	git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/luanti-org/minetest_game.git luanti/games/minetest_game && \
	rm -fr luanti/games/minetest_game/.git
WORKDIR /usr/src/luanti
RUN cmake -B build \
		-DCMAKE_INSTALL_PREFIX=/usr/local \
		-DCMAKE_BUILD_TYPE=Release \
		-DBUILD_SERVER=FALSE \
		-DBUILD_CLIENT=TRUE \
		-DBUILD_UNITTESTS=FALSE \
		-DBUILD_DOCUMENTATION=FALSE \
		-DENABLE_SOUND=OFF \
		-DENABLE_POSTGRESQL=OFF \
		-DENABLE_REDIS=OFF \
		-DENABLE_PROMETHEUS=FALSE \
		-DVERSION_EXTRA=docker_client \
		-DENABLE_OPENGL=ON \
		-DENABLE_OPENGL3=OFF \
		-DENABLE_GLES2=OFF \
		-DUSE_SDL2=OFF \
		-GNinja && \
	cmake --build build && \
	cmake --install build

FROM ${OPENGL_BASE_IMAGE}

COPY --from=compile /usr/local/share/luanti /usr/local/share/luanti
COPY --from=compile /usr/local/bin/luanti /usr/local/bin/luanti
COPY --from=compile /usr/local/bin /usr/local/bin
COPY --from=compile /usr/local/lib /usr/local/lib
COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh

RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc luajit x11vnc bash xdotool leveldb jsoncpp libxi jpeg libpng bind-tools jsoncpp procps && \
	adduser -D minetest --uid 30000 -h /var/lib/luanti && \
	mkdir /var/lib/luanti/.luanti && \
	chown -R minetest:minetest /var/lib/luanti && \
	chmod 755 /usr/local/bin/entrypoint.sh


WORKDIR /var/lib/luanti

COPY <<-EOF /var/lib/luanti/.luanti/minetest.conf
	enable_fog = false
	leaves_style = opaque
	smooth_lighting = false
	enable_clouds = false
	enable_sound = false
	enable_particles = false
	undersampling = 8
	enable_shaders = false
	fps_max = 10
	viewing_range = 20
	screen_w = 640
	screen_h = 480
	fullscreen_bpp = 8
	fov = 45
	video_driver = opengl
EOF

RUN chown minetest:minetest /var/lib/luanti/.luanti/minetest.conf

USER minetest:minetest

ENV \
     SERVER="minetest_server" \
     PASSWORD="" \
     PORT="30000" \
     PLAYERNAME="random" \
     RANDOM_INPUT="0" \
     VNC="0"

# EXPOSE 5900/tcp
CMD ["/usr/local/bin/entrypoint.sh"]

