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 curl 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-sched.log4j.xml .

ENV softwareVersion=SOFTWARE-VERSION-NOT-SET \
	serverid=SITE \
	dburl="db-url-not-set" \
    dbdriver="db-driver-not-set" \
    dbuser="db-user-not-set" \
    jmshost_int_internal=activemqint \
    jmsport_int_internal=61616 \
    jmshost_sim_internal=activemqsim \
    jmsport_sim_internal=61626 \
    jmsuser=clientUser \
    jmsblob_minsize=100000 \
	mongodb_host_internal=mongodb \
	mongodb_port_internal=27017 \
    mongodb_database=test \
#    htclogdir_internal=/path/to/internal/htclogs/
    batchhost="batch-host-not-set" \
    batchuser="batch-user-not-set" \
    htcnodelist="batch-host-not-set" \
    slurm_partition="slurm-partition-not-set" \
    slurm_reservation="slurm_reservation-not-set" \
    slurm_partition_pu="slurm_partition_pu-not-set" \
    slurm_reservation_pu="slurm_reservation_pu-not-set" \
    maxJobsPerScan="max-jobs-per-scan-not-set" \
	maxOdeJobsPerUser="max-ode-jobs-per-user-not-set" \
	vcell_ssh_cmd_cmdtimeout="cmdSrvcSshCmdTimeoutMS-not-set" \
    vcell_ssh_cmd_restoretimeout="cmdSrvcSshCmdRestoreTimeoutFactor-not-set" \
	maxPdeJobsPerUser="max-pde-jobs-per-user-not-set"

ENV dbpswdfile=/run/secrets/dbpswd \
    jmspswdfile=/run/secrets/jmspswd \
    batchuserkeyfile=/run/secrets/batchuserkeyfile

EXPOSE 8000

VOLUME /simdata
VOLUME /htclogs

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-sched.log4j.xml \
	-Dvcell.primarySimdatadir.internal=/simdata \
	-Dvcell.htc.logdir.internal=/htclogs \
	-Dvcell.server.id="${serverid}" \
	-Dvcell.htc.user="${batchuser}" \
	-Dvcell.htc.hosts="${batchhost}" \
	-Dvcell.htc.userkeyfile="${batchuserkeyfile}" \
	-Dvcell.htc.nodelist="${htcnodelist}" \
	-Dvcell.slurm.partition="${slurm_partition}" \
	-Dvcell.slurm.reservation="${slurm_reservation}" \
	-Dvcell.slurm.partitionpu="${slurm_partition_pu}" \
	-Dvcell.slurm.reservationpu="${slurm_reservation_pu}" \
	-Dvcell.installDir=/usr/local/app \
	-Dvcell.server.dbConnectURL="${dburl}" \
	-Dvcell.server.dbDriverName="${dbdriver}" \
	-Dvcell.server.dbUserid="${dbuser}" \
	-Dvcell.db.pswdfile="${dbpswdfile}" \
	-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.blobMessageUseMongo=true \
	-Dvcell.jms.blobMessageMinSize="${jmsblob_minsize}" \
	-Dvcell.jms.user="${jmsuser}" \
	-Dvcell.jms.pswdfile="${jmspswdfile}" \
	-Dvcell.mongodb.host.internal=${mongodb_host_internal} \
	-Dvcell.mongodb.port.internal=${mongodb_port_internal} \
	-Dvcell.mongodb.database=${mongodb_database} \
	-Dvcell.server.maxJobsPerScan=${maxJobsPerScan} \
	-Dvcell.server.maxOdeJobsPerUser=${maxOdeJobsPerUser} \
	-Dvcell.server.maxPdeJobsPerUser=${maxPdeJobsPerUser} \
	-Dvcell.ssh.cmd.cmdtimeout=${vcell_ssh_cmd_cmdtimeout} \
	-Dvcell.ssh.cmd.restoretimeout=${vcell_ssh_cmd_restoretimeout} \
	-cp "./lib/*" cbit.vcell.message.server.dispatcher.SimulationDispatcher
