# Agencia en un contenedor, armada desde una release publicada en vez de desde el repo.
#
# Es el mismo runtime que deploy/docker/Dockerfile, pero la app sale del .tar.gz de linux
# de get.agencia.ip1.cc. Así la imagen se arma sin el repo (que es privado), sin Go, sin
# node para compilar la web y sin `downmark`: alcanza con este archivo y entrypoint.sh.
#
# BUILD, con el repo (el contexto es esta carpeta, que es donde está entrypoint.sh):
#   docker build -f deploy/docker/Dockerfile.release -t agencia deploy/docker
#
# BUILD, sin el repo: es lo que hace compose.release.yml, con el contexto publicado en
# https://get.agencia.ip1.cc/docker/context.tar.gz (este archivo como Dockerfile, más
# entrypoint.sh).
#
# Build-args:
#   VERSION   la release (v0.1.0). "latest" lee latest.json.
#   GET_URL   de dónde bajarla; para probar contra un server local.

# --- la app ------------------------------------------------------------------------
FROM debian:bookworm-slim AS app

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

ARG GET_URL=https://get.agencia.ip1.cc
ARG VERSION=latest
# Lo pone BuildKit según la plataforma de la imagen (amd64 o arm64), que coincide con los
# nombres de los paquetes.
ARG TARGETARCH

# latest.json entra con ADD y no con curl: ADD de una URL vuelve a mirar el archivo en cada
# build y rompe el caché si cambió. Con un RUN curl, la capa quedaría cacheada para
# siempre y `docker compose up --build` seguiría armando la release vieja aunque hubiera
# una nueva.
ADD ${GET_URL}/latest.json /tmp/latest.json

# El SHA-256 se verifica contra el SHA256SUMS de la release antes de descomprimir: un
# paquete corrupto o cambiado corta el build acá, y no se descubre en el primer arranque.
RUN set -eu; \
    arch="${TARGETARCH:-$(dpkg --print-architecture)}"; \
    version="$VERSION"; \
    if [ "$version" = latest ]; then \
        version="$(sed -n 's/^ *"version" *: *"\([^"]*\)".*/\1/p' /tmp/latest.json | head -n 1)"; \
    fi; \
    [ -n "$version" ] || { echo "latest.json no dice qué versión es la última" >&2; exit 1; }; \
    file="agencia-$version-linux-$arch.tar.gz"; \
    cd /tmp; \
    curl -fsSL --retry 3 -o SHA256SUMS "$GET_URL/releases/$version/SHA256SUMS"; \
    curl -fsSL --retry 3 -o "$file" "$GET_URL/releases/$version/$file"; \
    grep " $file\$" SHA256SUMS | sha256sum -c -; \
    mkdir -p /out; \
    tar -xzf "$file" -C /out; \
    /out/agencia/agencia version

# --- runtime ----------------------------------------------------------------------
#
# Desde acá es una copia de deploy/docker/Dockerfile: si cambia uno, cambia el otro. Los
# porqués de cada línea están allá.
FROM node:22-bookworm-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
        ca-certificates curl git ripgrep \
    && rm -rf /var/lib/apt/lists/*

ARG AGENT_CLI="@anthropic-ai/claude-code"
RUN if [ "$AGENT_CLI" != "none" ]; then npm install -g "$AGENT_CLI"; fi

ARG UID=1000
ARG GID=1000
RUN if [ "$GID" != "1000" ]; then groupadd -g "$GID" agent; fi \
    && useradd -m -u "$UID" -g "$GID" -s /bin/bash agent 2>/dev/null \
    || usermod -l agent -d /home/agent -m node 2>/dev/null || true

COPY --from=app /out/agencia /opt/agencia
COPY entrypoint.sh /usr/local/bin/entrypoint
RUN chmod +x /usr/local/bin/entrypoint \
    && ln -s /opt/agencia/agencia /usr/local/bin/agencia

RUN mkdir -p /data && chown -R "$UID:$GID" /data /home/agent

USER agent
ENV HOME=/home/agent

ENV AGENCIA_DATA=/data \
    AGENCIA_ADDR=0.0.0.0:7777 \
    AGENCIA_AGENT_BIN=claude \
    AGENCIA_AGENT_ARGS=--dangerously-skip-permissions

VOLUME ["/data"]
EXPOSE 7777

ENTRYPOINT ["entrypoint"]
