FROM node:20.1-alpine

ARG FUNCTION_DIR="/var/task"
# TODO: It should be python3.10 but serverless-offline doesn't support it
ARG PYTHON_VERSION=3.9.9

ENV FUNCTION_DIR ${FUNCTION_DIR}
ENV PYTHONPATH ${FUNCTION_DIR}/.serverless/requirements/

# install mariadb
RUN apk add --update --no-cache mariadb-dev

# install build dependencies and needed tools
RUN apk add --update --no-cache \
    wget \
    gcc \
    make \
    zlib-dev \
    libffi-dev \
    openssl-dev \
    musl-dev

# download and extract python sources
RUN cd /opt && \
    wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \
    tar xzf Python-${PYTHON_VERSION}.tgz

# build python and remove left-over sources
RUN cd /opt/Python-${PYTHON_VERSION} && \
    ./configure --prefix=/usr --enable-optimizations --with-ensurepip=install && \
    make install && \
    rm /opt/Python-${PYTHON_VERSION}.tgz /opt/Python-${PYTHON_VERSION} -rf

# install serverless
RUN npm install -g nodemon && \
    npm install -g serverless && \
    npm install -g serverless-offline

RUN mkdir -p $FUNCTION_DIR

WORKDIR ${FUNCTION_DIR}

VOLUME ${FUNCTION_DIR}/node_modules
COPY ./package*.json ${FUNCTION_DIR}/
RUN npm install --no-save

COPY ./serverless.yml ${FUNCTION_DIR}/

#VOLUME ${FUNCTION_DIR}/.serverless
COPY ./requirements/ ${FUNCTION_DIR}/requirements/
RUN sls requirements install


EXPOSE 8000 8001
CMD [ "npm", "run", "watch" ]
