# 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 curl -L -o koral-head.zip https://github.com/KorAP/Koral/archive/HEAD.zip && \
#    unzip koral-head.zip && \
#    cd Koral-* && \
#    mvn clean install && \
#    cd /kustvakt && \
#    rm -rf Koral-* koral-head.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 -DskipTests=true && \
    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 eclipse-temurin:22-jre-alpine 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

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",  "/kustvakt/Kustvakt.jar"]

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