# ============================================================
# Dockerfile — Workflow Otomatis v2.3
#
# Multi-stage build:
#   Stage 1 (builder): install deps + compile wheels
#   Stage 2 (runtime): slim image, copy installed packages
#
# Build:
#   docker build -t workflow-otomatis .
#
# Run:
#   docker run --env-file .env workflow-otomatis
#   docker run --env-file .env workflow-otomatis --dry-run
#   docker run --env-file .env -p 5000:5000 workflow-otomatis --dashboard
# ============================================================

# ── Stage 1: Builder ─────────────────────────────────────────
FROM python:3.12-slim AS builder

WORKDIR /build

# System deps for lxml, cryptography
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    libxml2-dev \
    libxslt1-dev \
    libffi-dev \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt


# ── Stage 2: Runtime ─────────────────────────────────────────
FROM python:3.12-slim AS runtime

LABEL maintainer="workflow-otomatis"
LABEL version="2.3"
LABEL description="Otomasi konten end-to-end: fetch → generate → QC → publish"

# Runtime deps (libxml2 untuk lxml)
RUN apt-get update && apt-get install -y --no-install-recommends \
    libxml2 \
    libxslt1.1 \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Copy installed Python packages from builder
COPY --from=builder /install /usr/local

# Create non-root user
RUN useradd -m -s /bin/bash worker
USER worker

WORKDIR /app

# Copy application code
COPY --chown=worker:worker . .

# Create runtime directories
RUN mkdir -p logs/images

# Default: jalankan workflow sekali
# Override via docker-compose command: atau docker run args
ENTRYPOINT ["python3", "workflow.py"]
CMD []

# Healthcheck untuk mode dashboard (port 5000)
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl -sf http://localhost:5000/health -o /dev/null || exit 1

# Expose dashboard port
EXPOSE 5000

# Expose webhook port
EXPOSE 8765
