FROM almalinux:9.5 AS build_image
WORKDIR /workdir/sim_telarray
ARG BUILD_OPT="prod6-sc"
ARG EXTRA_DEF="-DMAXIMUM_TELESCOPES=128"
ARG HADRONIC_MODEL="qgs2"
ARG AVX_FLAG="no_opt"
ARG CORSIKA_VERSION="77550"
ARG BERNLOHR_VERSION="1.68"

RUN yum update -y && yum install -y \
    gcc-fortran gsl-devel libgfortran \
    csh patch perl which && \
    yum clean all

ADD corsika_simtelarray.tar.gz .
RUN rm -f examples-with-data.tar.gz && \
    rm -f sim_telarray_config.tar.gz && \
    export EXTRA_DEFINES="${EXTRA_DEF}" && ./build_all $BUILD_OPT $HADRONIC_MODEL gsl

# corsika source code is removed to follow
# the corsika non-distribution policy.
RUN mv ./corsika-7*/run corsika-run && \
    rm -rf ./corsika-7[0-9]* && \
    find . -name "*.tar.gz" -delete && \
    rm -rf /var/cache/yum/* /tmp/* /var/tmp/*

# remove unnecessary large QGSJet tables (e.g. remove qgs3 tables when using qgs2)
RUN if [[ "$HADRONIC_MODEL" == "qgs3" ]]; then \
        find . -name "qgsdat-II-04.bz2" -exec rm -fv {} \; ; \
    fi && \
    if [[ "$HADRONIC_MODEL" == "qgs2" ]]; then \
        find . -name "qgsdat-III.bz2" -exec rm -fv {} \; ; \
    fi

# create a yml file in workdir with the build options
RUN echo "build_opt: $BUILD_OPT" > /workdir/sim_telarray/build_opts.yml && \
    echo "extra_def: $EXTRA_DEF" >> /workdir/sim_telarray/build_opts.yml && \
    echo "hadronic_model: $HADRONIC_MODEL" >> /workdir/sim_telarray/build_opts.yml && \
    echo "avx_flag: $AVX_FLAG" >> /workdir/sim_telarray/build_opts.yml && \
    echo "corsika_version: $CORSIKA_VERSION" >> /workdir/sim_telarray/build_opts.yml && \
    echo "bernlohr_version: $BERNLOHR_VERSION" >> /workdir/sim_telarray/build_opts.yml

FROM almalinux:9.5-minimal
WORKDIR /workdir
COPY --from=build_image /workdir/sim_telarray/ /workdir/sim_telarray/

RUN microdnf update -y && microdnf install -y \
    bc \
    zstd \
    gsl-devel \
    gcc-fortran \
    procps && \
    microdnf clean all

# create a symbolic link to the corsika executable
RUN cprog=$(/bin/ls /workdir/sim_telarray/corsika-run/corsika*$(uname)_* 2>/dev/null | tail -1) && \
    ln -sf $cprog /workdir/sim_telarray/corsika-run/corsika

ENV SIMTEL_PATH="/workdir/sim_telarray"
