FROM python:3.14-slim

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

# Node.js 22 LTS
RUN apt-get update \
    && apt-get install -y --no-install-recommends ca-certificates curl tini xvfb \
    && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
    && apt-get install -y --no-install-recommends nodejs \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Python deps — cached until pyproject.toml / uv.lock change
COPY pyproject.toml uv.lock ./

# TypeScript deps — cached until package*.json changes
COPY room_cal/service_api/typescript/package*.json \
     ./room_cal/service_api/typescript/
RUN cd room_cal/service_api/typescript \
    && npm ci \
    && node_modules/.bin/playwright install-deps chromium

# Entrypoint
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# App source + install project
COPY room_cal/ ./room_cal/
COPY docker/uvicorn_log.json /etc/uvicorn_log.json
RUN mkdir /root/.local && ln -s /config /root/.local/room_cal \
    && uv sync --group api --group mcp --no-dev --frozen --no-install-project \
    && uv sync --group api --group mcp --no-dev --frozen

# Exec
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["/entrypoint.sh"]
