##
## Copyright (c) 2022 - Team11. All rights reserved.
##

##
## Builder
##

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS builder

ENV GITLAB_TOKEN=gitlab-ci-token:glpat-9JxzsUwnZKbWBz-eXJvN

ENV DVITA_GIT_VERSION=DVITA-phase3-10B

ENV DVITA_VM_REPO=https://${GITLAB_TOKEN}@gitlab.team11.lv/dvita/mirrors/neo-vm.git
ENV DVITA_VM_DIR=neo-vm

ENV DVITA_CORE_REPO=https://${GITLAB_TOKEN}@gitlab.team11.lv/dvita/mirrors/neo.git
ENV DVITA_CORE_DIR=neo

ENV DVITA_NODE_REPO=https://${GITLAB_TOKEN}@gitlab.team11.lv/dvita/mirrors/neo-node.git
ENV DVITA_NODE_DIR=dvita-node

ENV DVITA_MODULES_REPO=https://${GITLAB_TOKEN}@gitlab.team11.lv/dvita/mirrors/neo-modules.git
ENV DVITA_MODULES_DIR=neo-modules

#ENV DVITA_SC_WRAPPER_REPO=https://${GITLAB_TOKEN}@gitlab.team11.lv/dvita/dvita-sc-wrapper.git
#ENV DVITA_SC_WRAPPER_DIR=dvita-sc-wrapper

ENV DVITA_DVITA_MODULES_REPO=https://${GITLAB_TOKEN}@gitlab.team11.lv/dvita/dvita-modules.git
ENV DVITA_DVITA_MODULES_DIR=dvita-modules

# Install deps
RUN apt-get update && apt-get install -y \
    make \
    git \
    zip

# Clone all repos
WORKDIR /
RUN git clone ${DVITA_VM_REPO} ${DVITA_VM_DIR}
RUN git clone ${DVITA_CORE_REPO} ${DVITA_CORE_DIR}
RUN git clone ${DVITA_NODE_REPO} ${DVITA_NODE_DIR}
RUN git clone ${DVITA_MODULES_REPO} ${DVITA_MODULES_DIR}
#RUN git clone ${DVITA_SC_WRAPPER_REPO} ${DVITA_SC_WRAPPER_DIR}
RUN git clone ${DVITA_DVITA_MODULES_REPO} ${DVITA_DVITA_MODULES_DIR}

# Build VM
WORKDIR /${DVITA_VM_DIR}
RUN git checkout ${DVITA_GIT_VERSION}
RUN make

# Build Core
WORKDIR /${DVITA_CORE_DIR}
RUN git checkout ${DVITA_GIT_VERSION}
RUN make

# Build sc wrapper
#WORKDIR /${DVITA_SC_WRAPPER_DIR}
#RUN make

# Build Node
WORKDIR /${DVITA_NODE_DIR}
RUN git checkout ${DVITA_GIT_VERSION}
RUN make

# Build Modules
WORKDIR /${DVITA_MODULES_DIR}
RUN git checkout ${DVITA_GIT_VERSION}
RUN make

# Build DVITA Modules
WORKDIR /${DVITA_DVITA_MODULES_DIR}
#RUN git checkout ${DVITA_GIT_VERSION}
RUN make

##
## Production
##

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS production

ENV DVITA_NODE_DIR=dvita-node
ENV DVITA_MODULES_DIR=neo-modules
ENV DVITA_DVITA_MODULES_DIR=dvita-modules

RUN apt-get update && apt-get install -y \
    screen \
    libleveldb-dev \
    sqlite3 \
    libsqlite3-dev \
    libunwind8-dev

WORKDIR /${DVITA_NODE_DIR}

# Copy CLI
COPY --from=builder /${DVITA_NODE_DIR}/neo-cli/dist ./

# Copy NEO Modules
COPY --from=builder /${DVITA_MODULES_DIR}/dist ./Plugins/

# Copy DVITA Modules
COPY --from=builder /${DVITA_DVITA_MODULES_DIR}/dist ./Plugins/

# Cleanup modules
RUN rm -f \
    ./Plugins/RocksDBStore.dll \
    ./Plugins/OracleService.dll \
    ./Plugins/DvitaBlockListener.dll

# Cleanup main configs
RUN rm -f config*.json

# Gather all configurations
ENV DVITA_CONFIGS_DIR=config/testnet

# Add all Configs
COPY ${DVITA_CONFIGS_DIR} ./

# Add startup script
COPY start-node.sh ./

# Require volume
VOLUME /dvita-node-data

# Run the node using startup script
ENTRYPOINT ["./start-node.sh"]
