#######################################################################################
# Copyright ETSI Contributors and Others.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#######################################################################################


########################
# Stage 1: Build stage #
########################

FROM python:3.10-alpine AS base


ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1

FROM python:3.10-alpine AS builder

# Install build dependencies
RUN apk add --no-cache \
    gcc \
    musl-dev \
    libffi-dev \
    openssl-dev \
    curl \
    git \
    openssh-client \
    zlib-dev \
    jpeg-dev \
    libxml2-dev \
    libxslt-dev

WORKDIR /app

# Create virtual environment
RUN python -m venv /app/.venv
ENV PATH="/app/.venv/bin:$PATH"

ARG COMMON_GERRIT_REFSPEC=master

# Install OSM dependency modules with no cache
RUN git clone --filter=blob:none --tags https://osm.etsi.org/gerrit/osm/common.git /tmp/osm-common && \
    cd /tmp/osm-common && \
    git fetch origin "${COMMON_GERRIT_REFSPEC}" && \
    git checkout FETCH_HEAD &&\
    cd - && \
    pip install --no-cache-dir -r /tmp/osm-common/requirements.txt && \
    pip install --no-cache-dir /tmp/osm-common

# Install MON
COPY . .
RUN pip install --no-cache-dir -r requirements.txt \
    && pip install --no-cache-dir  .


###########################################################################################################################################################

########################
# Stage 2: Final image #
########################

FROM python:3.10-alpine AS final

# Install runtime dependencies
RUN apk add --no-cache \
    ca-certificates \
    openssh-client

# Copy virtual environment from build stage
COPY --from=builder /app/.venv /app/.venv
ENV PATH="/app/.venv/bin:$PATH"

# Copy necessary binaries and libraries
COPY --from=builder /usr/lib/ /usr/lib/
COPY --from=builder /lib/ /lib/

# Copy application scripts
COPY scripts/ /app/scripts/

# Create app user and directories
RUN addgroup -g 1000 appuser && \
    adduser -u 1000 -G appuser -D -h /app appuser && \
    mkdir -p /app/storage/kafka && \
    mkdir /app/log && \
    chown -R appuser:appuser /app

WORKDIR /app

USER appuser

# Environment variables
ENV OSMMON_MESSAGE_DRIVER=kafka \
    OSMMON_MESSAGE_HOST=kafka \
    OSMMON_MESSAGE_PORT=9092 \
    OSMMON_DATABASE_DRIVER=mongo \
    OSMMON_DATABASE_URI=mongodb://mongo:27017 \
    OSMMON_SQL_DATABASE_URI=sqlite:///mon_sqlite.db \
    OSMMON_OPENSTACK_DEFAULT_GRANULARITY=300 \
    OSMMON_GLOBAL_REQUEST_TIMEOUT=10 \
    OSMMON_GLOBAL_LOGLEVEL=INFO \
    OSMMON_VCA_HOST=localhost \
    OSMMON_VCA_SECRET=secret \
    OSMMON_VCA_USER=admin \
    OSMMON_VCA_CACERT=cacert \
    OSMMON_DATABASE_COMMONKEY=changeme \
    OSMMON_COLLECTOR_INTERVAL=30 \
    OSMMON_EVALUATOR_INTERVAL=30 \
    OSMMON_PROMETHEUS_URL=http://prometheus:9090 \
    OSMMON_GRAFANA_URL=http://grafana:3000 \
    OSMMON_GRAFANA_USER=admin \
    OSMMON_GRAFANA_PASSWORD=admin

EXPOSE 8000

HEALTHCHECK --start-period=120s --interval=5s --timeout=2s --retries=12\
  CMD osm-mon-healthcheck || exit 1

# Switch to app user
USER appuser

CMD ["/bin/sh", "scripts/dashboarder-start.sh"]
