FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:python311 AS base

ENV         PYTHONDONTWRITEBYTECODE=1
ENV         PYTHONUNBUFFERED=1
ENV         VIRTUAL_ENV=/var/venv
ENV         PATH="$VIRTUAL_ENV/bin:$PATH"

USER        root

RUN         python -m venv ${VIRTUAL_ENV}
RUN         pip install --upgrade pip setuptools && \
            pip install --no-cache poetry

RUN         useradd uwsgi -s /bin/false

USER        worker

WORKDIR     /var/app
COPY        pyproject.toml poetry.lock /var/app/

FROM        base AS deploy

USER        root

RUN         apt-get -y update && \
            apt-get -y upgrade && \
            apt-get -y install gcc && \
            poetry install --only main --no-root --no-cache && \
            apt-get -y remove --purge gcc && \
            apt-get -y autoremove && \
            apt-get -y clean &&  \
            rm -rf /var/lib/apt/lists/*

USER        worker

WORKDIR     /var/app

COPY        gridgen /var/app/gridgen
COPY        application.py uwsgi.ini /var/app/
COPY        uwsgi-start.sh /

EXPOSE      8080

ENTRYPOINT  ["/uwsgi-start.sh"]

FROM        base AS dev

USER        root

RUN         apt-get -y update && \
            apt-get -y upgrade && \
            apt-get -y install gcc && \
            poetry install --extras dev --no-root --no-cache && \
            apt-get purge -y gcc && \
            apt-get -y autoremove

USER        worker

COPY        gridgen /var/app/gridgen
COPY        scripts /var/app/scripts
COPY        application.py dev.py docker-compose.yml /var/app/

EXPOSE      5000

ENTRYPOINT  ["python", "dev.py"]

FROM        dev AS unit-lint

ENV         RUFF_CACHE_DIR=/tmp/.ruff_cache
USER        worker
COPY        tests /var/app/tests

ENTRYPOINT ["scripts/unit-lint.sh"]

#####################################
### Build image for code format   ###
#####################################
FROM       dev AS format

USER       worker
COPY       tests /var/app/tests

ENTRYPOINT ["scripts/format.sh"]

################################
### Generate poetry lockfile ###
################################
FROM        base AS update-lockfile

# Use root so the poetry.lock file can be rewritten inside of the container
USER        root

COPY        scripts/update-lockfile.sh /var/app/scripts/
ENTRYPOINT  ["scripts/update-lockfile.sh"]
