# ─────────────────────────────────────────────────────────────────
# Slimmer — Dockerized Build & Test Environment
# ─────────────────────────────────────────────────────────────────
# Multi-stage build:
#   Stage 1: Build and test
#   Stage 2: Minimal runtime image (optional)
# ─────────────────────────────────────────────────────────────────

# Stage 1: Builder + Test runner
FROM rust:1.83-slim-bookworm AS builder

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    pkg-config \
    && rm -rf /var/lib/apt/lists/*

# Copy manifests first for dependency caching
COPY Cargo.toml Cargo.lock ./

# Create a dummy main.rs to build dependencies
RUN mkdir -p src && \
    echo "fn main() {}" > src/main.rs && \
    mkdir -p tests && \
    echo "" > tests/integration_test.rs && \
    cargo build --release 2>/dev/null || true && \
    cargo build --release --tests 2>/dev/null || true && \
    rm -rf src tests

# Copy actual source code
COPY src/ src/
COPY tests/ tests/

# Build the application
RUN cargo build --release

# Run all tests
RUN cargo test --release

# ─────────────────────────────────────────────────────────────────
# Stage 2: Test with simulated macOS directory structure
# ─────────────────────────────────────────────────────────────────
FROM debian:bookworm-slim AS test-runtime

WORKDIR /app

# Copy the built binary
COPY --from=builder /app/target/release/slimmer /usr/local/bin/slimmer

# Create a simulated macOS home directory for testing
RUN mkdir -p /fakehome && \
    # Library/Caches (simulated app caches)
    mkdir -p /fakehome/Library/Caches/com.apple.Safari && \
    dd if=/dev/urandom of=/fakehome/Library/Caches/com.apple.Safari/cache.db bs=1024 count=500 2>/dev/null && \
    mkdir -p /fakehome/Library/Caches/com.spotify.client && \
    dd if=/dev/urandom of=/fakehome/Library/Caches/com.spotify.client/storage bs=1024 count=300 2>/dev/null && \
    # Library/Logs
    mkdir -p /fakehome/Library/Logs/DiagnosticReports && \
    echo "system log entry" > /fakehome/Library/Logs/system.log && \
    echo "crash data" > /fakehome/Library/Logs/DiagnosticReports/crash_001.ips && \
    # .Trash
    mkdir -p /fakehome/.Trash && \
    dd if=/dev/urandom of=/fakehome/.Trash/old_movie.mp4 bs=1024 count=2000 2>/dev/null && \
    # Downloads
    mkdir -p /fakehome/Downloads && \
    dd if=/dev/urandom of=/fakehome/Downloads/installer.dmg bs=1024 count=1000 2>/dev/null && \
    dd if=/dev/urandom of=/fakehome/Downloads/archive.zip bs=1024 count=500 2>/dev/null && \
    # Developer: Xcode DerivedData
    mkdir -p "/fakehome/Library/Developer/Xcode/DerivedData/MyApp-abc123" && \
    dd if=/dev/urandom of="/fakehome/Library/Developer/Xcode/DerivedData/MyApp-abc123/Build.db" bs=1024 count=800 2>/dev/null && \
    # Developer: iOS DeviceSupport
    mkdir -p "/fakehome/Library/Developer/Xcode/iOS DeviceSupport/17.0" && \
    dd if=/dev/urandom of="/fakehome/Library/Developer/Xcode/iOS DeviceSupport/17.0/Symbols.db" bs=1024 count=600 2>/dev/null && \
    # npm cache
    mkdir -p /fakehome/.npm/_cacache && \
    dd if=/dev/urandom of=/fakehome/.npm/_cacache/content.db bs=1024 count=400 2>/dev/null && \
    # Cargo registry
    mkdir -p /fakehome/.cargo/registry/cache && \
    dd if=/dev/urandom of=/fakehome/.cargo/registry/cache/index.crate bs=1024 count=200 2>/dev/null && \
    # Application Support (various)
    mkdir -p "/fakehome/Library/Application Support/Slack" && \
    dd if=/dev/urandom of="/fakehome/Library/Application Support/Slack/cache.db" bs=1024 count=300 2>/dev/null && \
    mkdir -p "/fakehome/Library/Application Support/MobileSync/Backup/old-iphone" && \
    dd if=/dev/urandom of="/fakehome/Library/Application Support/MobileSync/Backup/old-iphone/backup.dat" bs=1024 count=1500 2>/dev/null && \
    # Homebrew cache
    mkdir -p /fakehome/Library/Caches/Homebrew && \
    dd if=/dev/urandom of=/fakehome/Library/Caches/Homebrew/downloads.tar bs=1024 count=250 2>/dev/null && \
    # pip cache
    mkdir -p /fakehome/Library/Caches/pip && \
    dd if=/dev/urandom of=/fakehome/Library/Caches/pip/wheels.cache bs=1024 count=150 2>/dev/null

# Default command: run diagnostic against simulated home
CMD ["slimmer", "--home", "/fakehome"]
