# Use an official Python runtime as a parent image
FROM python:3.8-alpine3.18 as builder

RUN apk update && apk upgrade
RUN apk add --no-cache --virtual .build-deps build-base git
RUN apk add --upgrade --no-cache bash sqlite libffi-dev tzdata

ENV TZ America/New_York
ENV PYTHONUNBUFFERED 1

# Set the working directory in the container to /app
WORKDIR /app

RUN mkdir -p /app/instance/data

# Copy the current directory contents into the container at /app
COPY app.py /app
COPY requirements.txt /app
COPY models.py /app
COPY entrypoint.sh /app
COPY init_db.py /app


# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

RUN apk del .build-deps

# ---- Production Stage ----
FROM python:3.8-alpine3.18 as production
RUN apk add --upgrade --no-cache bash 

# Create a user to run our application
RUN adduser -D myuser -u 1000

# Copy the dependencies and installed packages from the builder image
WORKDIR /app
COPY --from=builder /app /app
COPY --from=builder /usr/local /usr/local
COPY --from=builder /usr/bin /usr/bin

RUN chown -R myuser:myuser /app
# Set script to be executable
RUN chmod +x /app/entrypoint.sh

# Switch to the created user
USER myuser

RUN ls -l /app
RUN ls -l /

# Set the script as the entrypoint
ENTRYPOINT ["/app/entrypoint.sh"]

# Start gunicorn with the appropriate options
CMD ["gunicorn", "-b", "0.0.0.0:3000", "--log-level=debug", "--workers=3", "app:app"]