# stage 1
FROM python:3.9-bullseye as backend

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

WORKDIR /app
RUN mkdir /app/src
RUN mkdir /app/logs
RUN mkdir /app/media

COPY ./requirements /app/requirements

RUN pip install -r requirements/production.txt


# stage 2
FROM node:current-bullseye AS frontend-build

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

WORKDIR /app

COPY ./build /app/build/
COPY ./*.json ./*.js ./.babelrc /app/

RUN npm ci

COPY ./src /app/src

RUN npm run build


# stage 3
FROM python:3.9-bullseye as production

RUN apt-get update && apt-get install -y --no-install-recommends \
        postgresql-client \
        vim \
        curl \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

RUN mkdir /app/logs
RUN mkdir /app/media
RUN mkdir /app/bin

COPY --from=backend /usr/local/lib/python3.9 /usr/local/lib/python3.9
COPY --from=backend /usr/local/bin/gunicorn /usr/local/bin/gunicorn
COPY --from=backend /usr/local/bin/celery /usr/local/bin/celery
COPY --from=backend /app/src/ /app/src/
COPY ./bin/docker-entrypoint.sh /app/bin/docker-entrypoint.sh

COPY --from=frontend-build /app/src/newsreader/static /app/src/newsreader/static

COPY ./src /app/src

RUN useradd -M -u 1000 newsreader
RUN chown -R newsreader:newsreader /app

USER newsreader

ARG COMMIT_HASH
ARG RELEASE=latest

ENV RELEASE=${RELEASE} \
    GIT_SHA=${COMMIT_HASH} \
    PYTHONUNBUFFERED=1 \
    DJANGO_SETTINGS_MODULE=newsreader.conf.production

ARG SECRET_KEY=dummy

RUN python src/manage.py collectstatic --noinput \
    && python src/manage.py compilemessages


# (optional) stage 4
FROM python:3.9-bullseye as development

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

WORKDIR /app

RUN mkdir /app/bin

COPY ./requirements /app/requirements
COPY ./bin/docker-entrypoint.sh /app/bin/docker-entrypoint.sh
COPY --from=backend /usr/local/lib/python3.9 /usr/local/lib/python3.9
COPY --from=backend /usr/local/bin/celery /usr/local/bin/celery
COPY --from=backend /app/src/ /app/src/

RUN pip install -r requirements/development.txt

RUN useradd -M -u 1000 newsreader
RUN chown -R newsreader:newsreader /app

USER newsreader
