# micropolis-city: the Micropolis engine (open-source SimCity, GPL v3) with a Python binding, the LLM-mayor harness,
# ffmpeg and Claude Code. Used as the Jetty sandbox snapshot `micropolis-city`.
#   docker buildx build --platform linux/amd64 -t micropolis-city micropolis/
FROM debian:bookworm-slim
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
      ca-certificates curl git sudo procps jq build-essential ffmpeg fonts-dejavu-core \
      python3 python3-venv python3-dev python3-pip \
 && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
 && apt-get install -y --no-install-recommends nodejs \
 && npm install -g @anthropic-ai/claude-code@2.1.282 \
 && rm -rf /var/lib/apt/lists/* /root/.npm \
 && ln -sf /usr/bin/python3 /usr/local/bin/python \
 && curl -LsSf https://astral.sh/uv/0.9.5/install.sh | env UV_INSTALL_DIR=/usr/local/bin sh \
 && mkdir -p /logs/agent/sessions /app && chmod -R 0777 /logs /app

# Micropolis engine sources + game resources (scenario files, tiles), pinned.
ARG MICROPOLIS_REPO=https://github.com/SimHacker/micropolis.git
ARG MICROPOLIS_COMMIT=c98f6b08519887b450d9be198bfca5237aab6d0c
RUN git init -q /src/micropolis && cd /src/micropolis && git remote add origin ${MICROPOLIS_REPO} \
 && git fetch -q --depth 1 origin ${MICROPOLIS_COMMIT} && git checkout -q FETCH_HEAD \
 && mkdir -p /opt/micropolis-engine/src/images \
 && cp -r MicropolisCore/res MicropolisCore/cities /opt/micropolis-engine/ \
 && cp -r MicropolisCore/src/images/micropolisEngine /opt/micropolis-engine/src/images/ \
 && cp -r MicropolisCore/src/MicropolisEngine/src /opt/micropolis-engine/engine-src

# Harness (Python) + engine binding.
COPY mpcity /opt/micropolis-eval/mpcity
COPY engine /opt/micropolis-eval/engine
COPY bin /opt/micropolis-eval/bin
COPY RUNBOOK.md Dockerfile /opt/micropolis-eval/
RUN rm -f /opt/micropolis-eval/mpcity/_micropolis*.so \
 && python3 -m venv /opt/micropolis-eval/.venv \
 && /opt/micropolis-eval/.venv/bin/pip install -q "httpx>=0.27" "numpy>=1.26" "pillow>=10.1" "pybind11>=2.12" \
 && /opt/micropolis-eval/engine/build.sh /opt/micropolis-engine/engine-src /opt/micropolis-eval/mpcity /opt/micropolis-eval/.venv/bin/python \
 && chmod +x /opt/micropolis-eval/bin/* \
 && ln -s /opt/micropolis-eval/bin/run-city /usr/local/bin/run-city \
 && ln -s /opt/micropolis-eval/bin/city-report /usr/local/bin/city-report \
 && chmod -R a+rX /opt/micropolis-engine /opt/micropolis-eval \
 && /opt/micropolis-eval/.venv/bin/python -c "import sys; sys.path.insert(0,'/opt/micropolis-eval'); from mpcity import _micropolis as M; e=M.Engine('/opt/micropolis-engine/res'); e.load_scenario(5); e.advance(4,100000); print('engine ok', e.state()['year'])"

ENV MICROPOLIS_HOME=/opt/micropolis-engine \
    MICROPOLIS_SNAPSHOT=micropolis-city \
    PYTHONUNBUFFERED=1
WORKDIR /app
