ARG GRIZZLY_EXTRA=base

FROM python:3.10-slim as base

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update

# <!-- mq
FROM base as mq

ARG IBM_MQ_LIB_HOST=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqdev/redist

RUN apt-get install -y --no-install-recommends wget

ENV IBM_MQ_LIB_HOST=${IBM_MQ_LIB_HOST}

RUN mkdir /tmp/mqm && cd /tmp/mqm && \
    wget -q --show-progress ${IBM_MQ_LIB_HOST}/9.2.2.0-IBM-MQC-Redist-LinuxX64.tar.gz -O - | tar xzf -

RUN mkdir -p /opt/mqm/inc \
    && mkdir -p /opt/mqm/lib \
    && mkdir -p /opt/mqm/lib64 \
    && mkdir -p /opt/mqm/gskit8/lib64 \
    && mkdir -p /opt/mqm/msg/en_US

RUN cp /tmp/mqm/inc/*.h* /opt/mqm/inc/ \
    && cp /tmp/mqm/lib/libcurl.so /opt/mqm/lib/ \
    && cp /tmp/mqm/lib/ccsid*.tbl /opt/mqm/lib/ \
    && cp /tmp/mqm/lib64/libmq*_r.so /opt/mqm/lib64/ \
    && cp -r /tmp/mqm/gskit8/lib64 /opt/mqm/gskit8/ \
    && cp /tmp/mqm/msg/en_US/amq.cat /opt/mqm/msg/en_US/
# mq -->

# <!-- python-base (no extras)
FROM base as python-base
## NOOP
# python-base (no extras) -->

# <!-- python-mq (with mq extras -> pymqi)
FROM python-base as python-mq

COPY --from=mq /opt/mqm /opt/mqm

ENV LD_LIBRARY_PATH="/opt/mqm/lib64:${LD_LIBRARY_PATH}"
# python-mq (with mq extras -> pymqi) -->

# <!-- python
FROM python-${GRIZZLY_EXTRA} AS python

RUN apt-get install -y --no-install-recommends \
    openssh-client \
    git \
    gcc \
    g++ \
    libffi-dev \
    cmake \
    make \
    libssl-dev \
    python3-dev

ENV LC_ALL=C
ENV LANG=C

RUN mkdir -p -m 0600 /root/.ssh

RUN python -m venv /venv

ENV PATH="/venv/bin:$PATH"

COPY requirements.txt /tmp

RUN --mount=type=ssh GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no' pip --disable-pip-version-check --no-cache-dir install -r /tmp/requirements.txt
# python -->

# <!-- entrypoint
FROM base AS entrypoint

RUN echo '#!/bin/sh\n\
set -e\n\
\n\
if [ "$GRIZZLY_CONTAINER_TTY" = "true" ]; then\n\
    stty rows $LINES cols $COLUMNS &>/dev/null || true\n\
fi\n\
\n\
exec behave "$@"' >> /grizzly-entrypoint.sh

RUN chmod +x /grizzly-entrypoint.sh
# entrypoint -->

# <!-- grizzly-base
FROM base AS grizzly-base

ARG GRIZZLY_UID
ARG GRIZZLY_GID

RUN groupadd \
        -g "${GRIZZLY_GID}" \
        grizzly \
    && \
    useradd \
        -u "${GRIZZLY_UID}" \
        -G grizzly \
        -N \
        -s /bin/bash \
        grizzly

RUN apt-get install -y --no-install-recommends \
    lsof \
    && rm -rf /var/lib/apt/lists/*

COPY --from=python --chown=grizzly:grizzly /venv /venv
COPY --from=entrypoint /grizzly-entrypoint.sh /grizzly-entrypoint.sh

ENV LC_ALL=C
ENV LANG=C
ENV PATH="/venv/bin:$PATH"
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH="/srv/grizzly"
# grizzly-base -->

# <!-- grizzly-mq
FROM grizzly-base AS grizzly-mq

COPY --from=mq /opt/mqm /opt/mqm

ENV LD_LIBRARY_PATH="/opt/mqm/lib64:${LD_LIBRARY_PATH}"

RUN mkdir -p /home/grizzly/IBM/MQ/data && \
    chown -R grizzly:grizzly /home/grizzly \
    && mkdir -p /srv/grizzly/features/logs \
    && ln -sf /srv/grizzly/features/logs /home/grizzly/IBM/MQ/data/errors \
    && rm -rf /srv/grizzly/features
# grizzly-mq -->

# <!-- grizzly
FROM grizzly-${GRIZZLY_EXTRA} as grizzly

USER grizzly

ENTRYPOINT ["./grizzly-entrypoint.sh"]
# grizzly -->
