FROM python:3.13-slim-bookworm as python-base

COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/

ENV PYTHONUNBUFFERED=true \
    PYSETUP_PATH="/opt/pysetup" \
    DBT_PACKAGES_INSTALL_PATH="/opt/pysetup/dbt_packages"


FROM python-base AS builder-base

RUN apt-get update \
    && apt-get install --no-install-recommends -y curl build-essential libffi-dev

WORKDIR $PYSETUP_PATH

COPY uv.lock pyproject.toml dbt_project.yml packages.yml ./

# Install project related packages
RUN uv sync --no-dev

# Install dbt related packages
RUN uv run dbt deps

### Linting and testing layer ###
FROM python-base AS lint-and-test

WORKDIR $PYSETUP_PATH

COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH


RUN uv sync

ADD scripts/lint-and-test.sh /
RUN chmod +x /lint-and-test.sh

WORKDIR /var/app

ENTRYPOINT  ["/lint-and-test.sh"]

### Deploy layer ###
FROM python-base as deploy

COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

ADD scripts/dbt-run.sh /
RUN chmod +x /dbt-run.sh

ADD . /var/app
WORKDIR /var/app

ENTRYPOINT  ["/dbt-run.sh"]

### test layer ###
FROM python-base as dbt-test

COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

ADD scripts/dbt-test.sh /
RUN chmod +x /dbt-test.sh

ADD . /var/app
WORKDIR /var/app

ENTRYPOINT  ["/dbt-test.sh"]

FROM python-base as invoke-validate-email-domains-lambda

WORKDIR $PYSETUP_PATH

COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

RUN uv sync --only-dev

ADD scripts/invoke_validate_email_domains_lambda.py /

ARG ENVIRONMENT
ARG LAMBDA_ACCOUNT_ID

ENV BUILD_ENVIRONMENT=${ENVIRONMENT}
ENV LAMBDA_ACCOUNT_ID=${LAMBDA_ACCOUNT_ID}

ENTRYPOINT uv run python /invoke_validate_email_domains_lambda.py -e $BUILD_ENVIRONMENT -lambda_account_id $LAMBDA_ACCOUNT_ID

FROM python-base as clean-artist-cache

WORKDIR $PYSETUP_PATH

COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

RUN uv sync --only-dev

ADD scripts/clean_artist_cache.py /

ENTRYPOINT uv run python /clean_artist_cache.py
