FROM ghcr.io/astral-sh/uv:0.10.11-python3.13-trixie-slim AS base

RUN apt-get update \
    && apt-get install -y --no-install-recommends libpq5 \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

ENV UV_COMPILE_BYTECODE=1 \
    UV_LINK_MODE=copy \
    PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PATH="/app/.venv/bin:$PATH"

COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-install-project

FROM base AS runtime

COPY . .
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
RUN uv sync --frozen --extra live --extra test --no-dev \
    && playwright install --with-deps chromium \
    && sed -i 's/\r$//' /app/scripts/startup.sh \
    && chmod +x /app/scripts/startup.sh \
    && useradd --create-home --uid 1000 app \
    && chown -R app:app /app /ms-playwright

USER app
EXPOSE 8000

CMD ["/app/scripts/startup.sh"]

FROM base AS test

COPY . .
RUN uv sync --frozen --extra test \
    && useradd --create-home --uid 1000 app \
    && chown -R app:app /app

USER app
CMD ["pytest", "tests", "-m", "not slow", "-ra", "--tb=short"]
