FROM ghcr.io/astral-sh/uv:0.10.4 AS uv
FROM public.ecr.aws/lambda/python:3.12 AS builder

RUN dnf install -y \
    gcc \
    gcc-c++ \
    make \
    sqlite-devel \
    zlib-devel \
    git \
    && dnf clean all

RUN git clone https://github.com/felt/tippecanoe.git /tmp/tippecanoe \
    && cd /tmp/tippecanoe \
    && make -j$(nproc)

ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_INSTALLER_METADATA=1
ENV UV_LINK_MODE=copy

ENV PATH="${PATH}:/root/.local/bin"

WORKDIR /app

COPY pyproject.toml uv.lock ./

RUN --mount=from=uv,source=/uv,target=/bin/uv \
    --mount=type=cache,target=/root/.cache/uv \
    --mount=type=bind,source=uv.lock,target=uv.lock \
    --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    uv export --frozen --no-emit-workspace --no-dev --no-editable --only-group lambda-processing -o requirements.txt && \
    uv pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

FROM public.ecr.aws/lambda/python:3.12

RUN dnf install -y \
    sqlite-libs \
    zlib \
    && dnf clean all

COPY --from=builder /tmp/tippecanoe/tippecanoe /usr/local/bin/tippecanoe
COPY --from=builder /tmp/tippecanoe/tile-join /usr/local/bin/tile-join

COPY --from=builder ${LAMBDA_TASK_ROOT} ${LAMBDA_TASK_ROOT}

COPY lambda_functions/processing/process_vector.py ./

CMD ["process_vector.lambda_handler"]