ARG UI_MODE=cli

# Donwnload stage
FROM ubuntu:18.04 AS download
ENV DEBIAN_FRONTEND=noninteractive TZ=Europe/Berlin

# Setup deps
RUN apt-get update && \
    apt-get -y install --no-install-recommends git openssh-client ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# Setup key and server for proprietary code
ARG PROP_SERVER
ARG PROP_SERVER_USER
ARG PROP_SERVER_KEY
RUN mkdir /root/.ssh/ && chmod 700 /root/.ssh && \
    echo "${PROP_SERVER_KEY}" > /root/.ssh/id_rsa && chmod 600 /root/.ssh/id_rsa && \
    echo "Host ${PROP_SERVER}" > /root/.ssh/config && echo "  User ${PROP_SERVER_USER}" >> /root/.ssh/config && \
    echo "  IdentityFile ~/.ssh/id_rsa" >> /root/.ssh/config && chmod 644 /root/.ssh/config && \
    touch /root/.ssh/known_hosts && chmod 644 /root/.ssh/known_hosts && \
    ssh-keyscan -H ${PROP_SERVER} >> /root/.ssh/known_hosts

# Clone sources
ARG PROP_DIR_SDR
ARG PROP_DIR_DECODER
WORKDIR /app
RUN git clone https://github.com/MOVE-II/move2radio.git && \
    cd move2radio && git checkout 6fcbae73359b0618312d222148aba07799a43a47 && git reset --hard && cd .. && \
    git clone git@${PROP_SERVER}:${PROP_DIR_SDR}/ldpc.git move2radio-prop/ldpc && \
    cd move2radio-prop/ldpc && git checkout 940e8f96ccae831c7d3ad6b9497710696cd7f324 && git reset --hard && cd ../.. && \
    git clone git@${PROP_SERVER}:${PROP_DIR_SDR}/gr-ccsds.git move2radio-prop/gr-ccsds && \
    cd move2radio-prop/gr-ccsds && git checkout 5777e4176fe381327fe6cf55b7ec0dfe3c63b3f6 && git reset --hard && cd ../..


# Base stage with deps
FROM ubuntu:18.04 AS base-cli
ENV DEBIAN_FRONTEND=noninteractive TZ=Europe/Berlin

# Setup build deps
RUN apt-get update && \
    apt-get -y install --no-install-recommends build-essential git cmake autoconf automake unzip libtool-bin pkgconf libssl-dev \
        python2.7 python-pip python3 python3-pip python-cheetah libcppunit-dev swig uuid-dev libusb-1.0-0-dev \
        python-mako libzmq3-dev libcomedi-dev python-sip-dev python-six socat && \
    rm -rf /var/lib/apt/lists/*


# Base stage with GUI deps
FROM base-cli as base-gui

# Setup grc and gui deps
RUN apt-get update && \
    apt-get -y install --no-install-recommends python-numpy python-wxgtk3.0 libzmq3-dev \
        libqt4-opengl-dev python-qt4 libqwt-dev python-gtk2 python-lxml && \
    rm -rf /var/lib/apt/lists/*


# Build stage
FROM base-${UI_MODE} AS build

# Copy sources
COPY --from=download /app /app

# Build sources
WORKDIR /app/move2radio
ARG UI_MODE=cli
COPY build/CMakeLists.${UI_MODE}.txt /app/move2radio/CMakeLists.txt
RUN mkdir build && cd build && \
    cmake -DAPPIMAGE=OFF -DCONDA_ENV=OFF -DLDPC_OFFLINE=ON -DGR_CCSDS_OFFLINE=ON -DOFFLINE_DEPENDENCY_PATH=/app/move2radio-prop .. && \ 
    make move2radio


# Run stage
FROM base-${UI_MODE} AS run

# Copy sources from build stage
COPY --from=build /app/move2radio/build/prefix/usr /app/move2radio/build/prefix/usr
COPY --from=build /app/move2radio/AppDir/move-ii-gr /app/move2radio/AppDir/move-ii-gr
ENV PATH="/app/move2radio/build/prefix/usr/bin:${PATH}" \
    PYTHONPATH="/app/move2radio/build/prefix/usr/lib/python2.7/dist-packages:${PYTHONPATH}" \
    LD_LIBRARY_PATH="/app/move2radio/build/prefix/usr/lib:${LD_LIBRARY_PATH}"

# Install binaries
COPY build/blocks/* app/move2radio/build/prefix/usr/share/gnuradio/grc/blocks/
COPY build/fakeserver/* /app/fakeserver/
ARG UI_MODE=cli
COPY build/run-${UI_MODE}.sh /app/run.sh
RUN chmod 644 app/move2radio/build/prefix/usr/share/gnuradio/grc/blocks/*.xml && \
    chmod +x /app/run.sh && ldconfig

ENTRYPOINT ["/app/run.sh"]