FROM eclipse-temurin:17 as jre-build

# Create a custom Java runtime
RUN $JAVA_HOME/bin/jlink \
         --add-modules ALL-MODULE-PATH \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

# Define base image and copy in jlink created minimal Java 17 environment
FROM debian:buster-slim
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=jre-build /javaruntime $JAVA_HOME

RUN mkdir -p /usr/local/app && \
	apt-get -y update && \
    apt-get -y install openssh-client screen apt-utils libfreetype6 fontconfig fonts-dejavu

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
RUN unlink /etc/localtime || true
RUN ln -s /usr/share/zoneinfo/America/New_York /etc/localtime

# Create a user with UID 10001 and GID 10000
RUN groupadd -g 10000 vcellgroup && \
    useradd -rm -d /home/vcell -s /bin/bash -u 10001 -g vcellgroup vcell

USER vcell

RUN mkdir -p ~vcell/.ssh && \
    chmod 700 ~vcell/.ssh

WORKDIR /usr/local/app

COPY ./vcell-server/target/vcell-server-0.0.1-SNAPSHOT.jar \
     ./vcell-server/target/maven-jars/*.jar \
     ./lib/


COPY ./docker/build/vcell-submit.log4j.xml .

ENV softwareVersion=SOFTWARE-VERSION-NOT-SET \
	serverid=SITE \
    jmshost_int_internal=activemqint \
    jmsport_int_internal=61616 \
    jmshost_sim_internal=activemqsim \
    jmsport_sim_internal=61616 \
    jmsuser=clientUser \
    jmshost_sim_external="jms-host-sim-external-not-set" \
    jmsport_sim_external="jms-port-sim-external-not-set" \
    jmsrestport_sim_external="jms-restport-sim-external-not-set" \
	mongodb_host_internal=mongodb \
	mongodb_port_internal=27017 \
    mongodb_database=test \
    mongodb_host_external="mongodb-host-external-not-set" \
    mongodb_port_external="mongodb-port-external-not-set" \
#    export_baseurl="export-baseurl-not-set" \
    simdatadir_external=/path/to/external/simdata/ \
    simdatadir_secondary_external=/path/to/external/secondary/simdata/ \
    simdatadir_parallel_external=/path/to/external/parallel/simdata/ \
#    htclogdir_internal=/path/to/internal/htclogs/ \
    htclogdir_external=/path/to/external/htclogs/ \
    nativesolverdir_external=/path/to/external/nativesolvers/ \
    htcnodelist="batch-host-not-set" \
    batch_singularity_imagefile=/path/to/external/batch/singularity.img \
    opt_singularity_imagefile=/path/to/external/opt/singularity_opt.img \
    docker_name="repo/namespace/vcell-batch:tag" \
    batchhost="batch-host-not-set" \
    batchuser="batch-user-not-set" \
    slurm_cmd_sbatch=sbatch \
    slurm_cmd_sacct=sacct \
    slurm_cmd_scancel=scancel \
    slurm_cmd_squeue=squeue \
    slurm_partition="slurm-partition-not-set" \
    slurm_reservation="slurm_reservation-not-set" \
    slurm_qos="slurm_qos-not-set" \
    slurm_partition_pu="slurm_partition_pu-not-set" \
    slurm_reservation_pu="slurm_reservation_pu-not-set" \
    slurm_qos_pu="slurm_qos_pu-not-set" \
    slurm_tmpdir="slurm-tmpdir-not-set" \
    slurm_local_singularity_dir="slurm_local_singularity_dir-not-set" \
    slurm_central_singularity_dir="slurm_central_singularity_dir-not-set" \
    slurm_singularity_module_name="slurm_singularity_module_name-not-set" \
    jmsblob_minsize=100000 \
    vcell_ssh_cmd_cmdtimeout="cmdSrvcSshCmdTimeoutMS-not-set" \
    vcell_ssh_cmd_restoretimeout="cmdSrvcSshCmdRestoreTimeoutFactor-not-set" \
    simdatadir_archive_external="simdatadir_archive_external-not-set" \
    simdatadir_archive_internal="simdatadir_archive_internal-not-set"

ENV jmspswdfile=/run/secrets/jmspswd \
	jmsrestpswdfile=/run/secrets/jmsrestpswd \
    batchuserkeyfile=/run/secrets/batchuserkeyfile

VOLUME /simdata
VOLUME /simdata_secondary
VOLUME /htclogs

EXPOSE 8000

ENTRYPOINT java \
    -Xdebug -agentlib:jdwp=transport=dt_socket,address=*:8000,server=y,suspend=n \
	-XX:MaxRAMPercentage=100 \
#	-XX:+PrintFlagsFinal -XshowSettings:vm \
    -Djava.awt.headless=true \
	-Dvcell.softwareVersion="${softwareVersion}" \
	-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
	-Dlog4j.configurationFile=/usr/local/app/vcell-submit.log4j.xml \
	-Dvcell.server.id="${serverid}" \
	-Dvcell.primarySimdatadir.internal=/simdata \
	-Dvcell.secondarySimdatadir.external="${simdatadir_secondary_external}" \
	-Dvcell.secondarySimdatadir.internal=/simdata_secondary \
	-Dvcell.primarySimdatadir.external="${simdatadir_external}" \
	-Dvcell.parallelDatadir.external="${simdatadir_parallel_external}" \
	-Dvcell.nativesolverdir.external="${nativesolverdir_external}" \
	-Dvcell.htc.user="${batchuser}" \
	-Dvcell.htc.hosts="${batchhost}" \
	-Dvcell.htc.userkeyfile="${batchuserkeyfile}" \
	-Dvcell.htc.logdir.internal=/htclogs \
	-Dvcell.htc.logdir.external="${htclogdir_external}" \
	-Dvcell.htc.nodelist="${htcnodelist}" \
	-Dvcell.slurm.cmd.sbatch="${slurm_cmd_sbatch}" \
	-Dvcell.slurm.cmd.sacct="${slurm_cmd_sacct}" \
	-Dvcell.slurm.cmd.squeue="${slurm_cmd_squeue}" \
	-Dvcell.slurm.cmd.scancel="${slurm_cmd_scancel}" \
	-Dvcell.slurm.partition="${slurm_partition}" \
	-Dvcell.slurm.reservation="${slurm_reservation}" \
	-Dvcell.slurm.qos="${slurm_qos}" \
	-Dvcell.slurm.partitionpu="${slurm_partition_pu}" \
	-Dvcell.slurm.reservationpu="${slurm_reservation_pu}" \
	-Dvcell.slurm.qospu="${slurm_qos_pu}" \
	-Dvcell.slurm.tmpdir="${slurm_tmpdir}" \
	-Dvcell.slurm.local.singularity.dir="${slurm_local_singularity_dir}" \
	-Dvcell.slurm.central.singularity.dir="${slurm_central_singularity_dir}" \
	-Dvcell.slurm.singularity.module.name="${slurm_singularity_module_name}" \
	-Dvcell.batch.singularity.image="${batch_singularity_imagefile}" \
	-Dvcell.opt.singularity.image="${opt_singularity_imagefile}" \
	-Dvcell.batch.docker.name="${docker_name}" \
	-Dvcell.simulation.postprocessor=JavaPostprocessor64 \
	-Dvcell.simulation.preprocessor=JavaPreprocessor64 \
	-Dvcell.javaSimulation.executable=JavaSimExe64 \
	-Dvcell.installDir=/usr/local/app \
	-Dvcell.jms.int.host.internal="${jmshost_int_internal}" \
	-Dvcell.jms.int.port.internal="${jmsport_int_internal}" \
	-Dvcell.jms.sim.host.internal="${jmshost_sim_internal}" \
	-Dvcell.jms.sim.port.internal="${jmsport_sim_internal}" \
	-Dvcell.jms.sim.host.external="${jmshost_sim_external}" \
	-Dvcell.jms.sim.port.external="${jmsport_sim_external}" \
	-Dvcell.jms.sim.restport.external="${jmsrestport_sim_external}" \
	-Dvcell.jms.blobMessageUseMongo=true \
	-Dvcell.jms.blobMessageMinSize="${jmsblob_minsize}" \
	-Dvcell.jms.user="${jmsuser}" \
	-Dvcell.jms.pswdfile="${jmspswdfile}" \
	-Dvcell.jms.rest.pswdfile="${jmsrestpswdfile}" \
	-Dvcell.mongodb.host.internal=${mongodb_host_internal} \
	-Dvcell.mongodb.port.internal=${mongodb_port_internal} \
	-Dvcell.mongodb.host.external=${mongodb_host_external} \
	-Dvcell.mongodb.port.external=${mongodb_port_external} \
	-Dvcell.mongodb.database=${mongodb_database} \
	-Dvcell.simdatadir.archive.internal=${simdatadir_archive_internal} \
	-Dvcell.simdatadir.archive.external=${simdatadir_archive_external} \
	-Dvcell.ssh.cmd.cmdtimeout=${vcell_ssh_cmd_cmdtimeout} \
	-Dvcell.ssh.cmd.restoretimeout=${vcell_ssh_cmd_restoretimeout} \
	-cp "./lib/*" cbit.vcell.message.server.batch.sim.HtcSimulationWorker
