FROM debian:bookworm-slim AS ttyd-builder

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    ca-certificates \
    cmake \
    git \
    libjson-c-dev \
    libssl-dev \
    libwebsockets-dev \
    pkg-config \
    && rm -rf /var/lib/apt/lists/*

RUN git clone --depth 1 https://github.com/tsl0922/ttyd.git /ttyd \
    && cmake -S /ttyd -B /ttyd/build \
    && cmake --build /ttyd/build \
    && cmake --install /ttyd/build

FROM python:3.13-slim-bookworm

ENV DEBIAN_FRONTEND=noninteractive

COPY --from=ttyd-builder /usr/local/bin/ttyd /usr/local/bin/ttyd

RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    git \
    libjson-c5 \
    libssl3 \
    libuv1 \
    libwebsockets-evlib-uv \
    libwebsockets17 \
    && rm -rf /var/lib/apt/lists/* \
    && pip install --no-cache-dir uv

WORKDIR /app
ARG CODECAT_VERSION=0.0.0
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
ENV UV_PYTHON=3.13
ENV PYTHONUNBUFFERED=1
ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_CODECAT=${CODECAT_VERSION}
ENV SETUPTOOLS_SCM_PRETEND_VERSION=${CODECAT_VERSION}

RUN --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 sync --frozen --no-install-project --no-dev

ADD . /app
COPY docker/entrypoint.sh /app/entrypoint.sh
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --frozen --no-dev

EXPOSE 80 8850
VOLUME ["/root/.codecat", "/workspace"]

ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["cli"]
