# use node base with bun installed - avoids vite+bun+docker hanging issues
# see: https://github.com/vitejs/vite/discussions/16030
FROM node:22

# install bun (pinned to avoid breaking changes from unpinned latest)
RUN npm install -g bun@1.2.22

ARG CF_API_KEY
ARG CF_EMAIL
ARG CF_ZONE_ID
ARG DISCORD_BOT_TOKEN
ARG DISCORD_ID
ARG DISCORD_OAUTH2
ARG DISCORD_PUB_KEY
ARG GITHUB_ADMIN_TOKEN
ARG GITHUB_APP_CLIENT_ID
ARG GITHUB_APP_SECRET
ARG GITHUB_SPONSOR_WEBHOOK_SECRET
ARG GITHUB_TOKEN
ARG IS_GUI_DEV
ARG NEXT_PUBLIC_GITHUB_APP_ID
ARG NEXT_PUBLIC_GITHUB_AUTH_CLIENT_ID
ARG NEXT_PUBLIC_IS_GUI_DEV
ARG NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
ARG NEXT_PUBLIC_SUPABASE_ANON_KEY
ARG NEXT_PUBLIC_SUPABASE_URL
ARG NEXT_PUBLIC_URL
ARG POSTMARK_SERVER_TOKEN
ARG CLOUDFLARE_TURNSTILE_SECRET
ARG SHOULD_UNLOCK_GIT_CRYPT
ARG STRIPE_SECRET_KEY
ARG STRIPE_SIGNING_SIGNATURE_SECRET
ARG STUDIO_JWT_SECRET
ARG SUPABASE_SERVICE_ROLE_KEY
ARG TAKEOUT_RENEWAL_COUPON_ID
ARG URL
ARG ONE_SERVER_URL
ARG APP_NAME
ARG GUI_PRO_SECRET
ARG DEEPSEEK_API_KEY
ARG BENTO_GITHUB_TOKEN
ARG BENTO_BRANCH

# install dependencies (sharp needs libvips for image processing)
RUN apt-get update && apt-get install -y git bsdmainutils vim-common gh libvips-dev

WORKDIR /root/hanzogui
COPY . .

# init git (allow empty commit if nothing to commit)
RUN git config --global user.email "you@example.com" && git config --global user.name "Docker Build" && git init . && git add -A && (git commit -m 'add' > /dev/null || true)

# Clone bento repository as sibling directory (optional)
# Use BENTO_BRANCH env var if set, otherwise default to main
WORKDIR /root
RUN if [ -n "$BENTO_GITHUB_TOKEN" ]; then \
      BRANCH="${BENTO_BRANCH:-main}"; \
      echo "Cloning bento repository (branch: $BRANCH)..."; \
      unset GITHUB_TOKEN && \
      echo "$BENTO_GITHUB_TOKEN" | gh auth login --with-token && \
      gh repo clone hanzogui/bento -- --branch "$BRANCH" && \
      gh auth logout --hostname github.com && \
      echo "✅ Bento repository cloned (branch: $BRANCH)" && \
      echo "REQUIRE_BENTO=true" > /tmp/bento_status; \
    else \
      echo "⚠️ BENTO_GITHUB_TOKEN not provided - bento features will not be available" && \
      echo "REQUIRE_BENTO=false" > /tmp/bento_status; \
    fi

WORKDIR /root/hanzogui

# Set REQUIRE_BENTO based on whether bento was cloned
RUN export $(cat /tmp/bento_status)

# First install without bento deps
RUN bun install

# Merge bento dependencies into root package.json and reinstall (only if bento was cloned)
RUN if [ -d "../bento" ]; then node scripts/with-bento.mjs && bun install; fi
RUN bun run build:js
RUN bun run build:app

EXPOSE 3000

CMD ["bash", "-c", "bun run docker:serve"]
