# *** WARNING *** This Dockerfile has been updated to build one image that can run both full and lite versions. The changes require updating existing docker compose files accordingly.

# Use alpine linux as base image
FROM eclipse-temurin:22-jdk-alpine AS builder
# Copy repository respecting .dockerignore
COPY . /kustvakt
WORKDIR /kustvakt
RUN apk update && \
    apk add --no-cache git \
            curl \
            perl \
            wget \
            maven
RUN git config --global user.email "korap+docker@ids-mannheim.de" && \
    git config --global user.name "Docker"

# Install Koral
RUN curl -I https://github.com/KorAP/Koral/releases/latest | \
      grep location | \
      perl -e '$|++; <> =~ m/tag\/(v[\d\.]+(?:-release)?)/; print "https://github.com/KorAP/Koral/archive/refs/tags/${1}\.zip\n"' |\
      wget -i - && \
    unzip *.zip && \
    cd Koral-* && \
    mvn clean install
RUN rm -r Koral-* v*.zip
RUN mkdir built

# Install Krill
RUN curl -I https://github.com/KorAP/Krill/releases/latest | \
      grep location | \
      perl -e '$|++; <> =~ m/tag\/(v[\d\.]+(?:-release)?)/; print "https://github.com/KorAP/Krill/archive/refs/tags/${1}\.zip\n"' |\
      wget -i - && \
    unzip *.zip && \
    cd Krill-* && \
    mvn clean install && \
    mvn -Dmaven.test.skip=true package && \
    mv target/Krill-Indexer.jar /kustvakt/built/Krill-Indexer.jar
RUN rm -r Krill-* v*.zip

# Kustvakt
RUN mvn clean package && \
    find target/Kustvakt-*.jar -exec mv {} /kustvakt/built/Kustvakt.jar ';'
RUN sed 's!\(krill\.indexDir\s*=\).\+!\1\/kustvakt\/index!' src/main/resources/kustvakt-lite.conf \
    > built/kustvakt-lite.conf
RUN cat src/main/resources/kustvakt.conf | \
    sed 's!\(krill\.indexDir\s*=\).\+!\1\/kustvakt\/index!' | \
    sed 's!\(ldap\.config\s*=\).\+!\1\/kustvakt\/ldap\/ldap\.conf!' | \
    sed 's!\(oauth2\.initial\.super\.client\s*=\).\+!\1\/true!' | \
    sed '$ a oauth2.initial.super.client = true' \
    > built/kustvakt.conf
RUN sed  's!\(ldifFile\s*=\).\+!\1\/kustvakt\/ldap\/ldap.ldif!' \
    src/main/resources/embedded-ldap-example.conf \
    > built/ldap.conf
RUN cat src/main/resources/example-users.ldif \
    > built/ldap.ldif
RUN apk del git \
            perl \
            curl \
            wget \
            maven
RUN cd ${M2_HOME} && rm -r .m2

# Cleanup
RUN rm -r src && \
    rm -r wiki-index


FROM busybox:latest AS example-index
WORKDIR /kustvakt
RUN addgroup -S korap && \
    adduser -S kustvakt -G korap && \
    mkdir kustvakt && \
    chown -R kustvakt:korap /kustvakt
COPY --from=builder /kustvakt/sample-index /kustvakt/index
USER kustvakt
CMD ["sh"]


FROM eclipse-temurin:22-jre-alpine AS kustvakt
RUN addgroup -S korap && \
    adduser -S kustvakt -G korap && \
    mkdir kustvakt && \
    chown -R kustvakt.korap /kustvakt
WORKDIR /kustvakt
USER kustvakt
RUN mkdir ./ldap && \
    mkdir ./client && \
    mkdir ./data
COPY --from=builder /kustvakt/built/Kustvakt.jar /kustvakt
COPY --from=builder /kustvakt/built/kustvakt.conf /kustvakt/data/
COPY --from=builder /kustvakt/built/kustvakt-lite.conf /kustvakt/data/
COPY --from=builder /kustvakt/built/ldap.* /kustvakt/ldap/
COPY --from=builder /kustvakt/built/Krill-Indexer.jar /kustvakt/
EXPOSE 8089
ENTRYPOINT [ "java", "-jar"]
CMD ["Kustvakt.jar"]

# docker build -f Dockerfile -t korap/kustvakt:{nr} .
# docker build -f Dockerfile -t korap/example-index:{nr} --target example-index .
# run full version
# docker run --rm --net host -v [absolute-path-sample-index]:/kustvakt/index korap/kustvakt:{nr}
# run lite version 
# docker run --rm --net host -v [absolute-path-sample-index]:/kustvakt/index korap/kustvakt:{nr} Kustvakt.jar --lite