# syntax=docker/dockerfile:1
ARG RUST_VERSION=1.93

# ── Stage 1: Build ──────────────────────────────────────────────────────────
FROM rust:${RUST_VERSION}-bookworm AS builder
WORKDIR /src

# Cache dependencies: copy only manifests first
COPY Cargo.toml Cargo.lock ./
COPY crates/symclaw-core/Cargo.toml crates/symclaw-core/Cargo.toml
COPY crates/symclaw-cli/Cargo.toml  crates/symclaw-cli/Cargo.toml
COPY crates/symclaw-wasm/Cargo.toml crates/symclaw-wasm/Cargo.toml
COPY crates/symclaw-skill/Cargo.toml crates/symclaw-skill/Cargo.toml
COPY crates/symclaw-gpu/Cargo.toml crates/symclaw-gpu/Cargo.toml
COPY crates/symclaw-collab/Cargo.toml crates/symclaw-collab/Cargo.toml
COPY crates/symclaw-python/Cargo.toml crates/symclaw-python/Cargo.toml
COPY crates/symclaw-ffi/Cargo.toml crates/symclaw-ffi/Cargo.toml
COPY benchmarks/Cargo.toml benchmarks/Cargo.toml

# Create stub sources so cargo can resolve the workspace
RUN for crate in symclaw-core symclaw-gpu symclaw-ffi; do \
      mkdir -p "crates/${crate}/src" && \
      echo '' > "crates/${crate}/src/lib.rs"; \
    done && \
    mkdir -p crates/symclaw-wasm/src && \
    echo '' > crates/symclaw-wasm/src/lib.rs && \
    mkdir -p crates/symclaw-python/src && \
    echo '' > crates/symclaw-python/src/lib.rs && \
    for crate in symclaw-cli symclaw-skill symclaw-collab; do \
      mkdir -p "crates/${crate}/src" && \
      echo '' > "crates/${crate}/src/lib.rs" && \
      echo 'fn main() {}' > "crates/${crate}/src/main.rs"; \
    done && \
    mkdir -p benchmarks/benches && \
    echo '' > benchmarks/benches/engine_bench.rs

# Build deps only (layer cache)
RUN --mount=type=cache,target=/usr/local/cargo/registry \
    --mount=type=cache,target=/src/target \
    cargo build --release --bin symclaw --bin symclaw-skill 2>/dev/null || true

# Copy real sources and build
COPY . .
RUN --mount=type=cache,target=/usr/local/cargo/registry \
    --mount=type=cache,target=/src/target \
    cargo build --release --bin symclaw --bin symclaw-skill && \
    cp target/release/symclaw target/release/symclaw-skill /usr/local/bin/

# ── Stage 2: Runtime ────────────────────────────────────────────────────────
FROM debian:bookworm-slim AS runtime

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

COPY --from=builder /usr/local/bin/symclaw      /usr/local/bin/symclaw
COPY --from=builder /usr/local/bin/symclaw-skill /usr/local/bin/symclaw-skill
COPY skill/ /opt/symclaw/skill/

WORKDIR /opt/symclaw

EXPOSE 18789 3000

HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD ["/usr/local/bin/symclaw", "--version"]

LABEL maintainer="Omar <omar@symclaw.dev>" \
      org.opencontainers.image.version="0.1.0" \
      org.opencontainers.image.description="SymClaw — symbolic mathematics engine" \
      org.opencontainers.image.source="https://github.com/symclaw/symclaw"

ENTRYPOINT ["/usr/local/bin/symclaw-skill"]
CMD ["/usr/local/bin/symclaw"]
