#!/usr/bin/env bash
# .devcontainer/post-start.sh
# Runs on every container start. Keeps lightweight tasks idempotent.
set -euo pipefail

ROOT="${ROOT:-${WORKSPACE_FOLDER:-}}"
if [ -z "${ROOT}" ]; then
  SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" >/dev/null 2>&1 && pwd -P)"
  ROOT="$(cd "${SCRIPT_DIR}/.." >/dev/null 2>&1 && pwd -P)"
fi
ROOT="${ROOT:-${PWD}}"

LOG_FILE="/tmp/postStart.log"
PREPULL_MARKER="${HOME}/.cache/foundation/.supabase-prepull.done"
DOCKER_WAIT_SECONDS="${DOCKER_WAIT_SECONDS:-60}"

log() {
  printf '%s\n' "$*" | tee -a "$LOG_FILE"
}

# Restart nix-daemon for this container session (no systemd in devcontainers).
if [ -x /nix/var/nix/profiles/default/bin/nix-daemon ]; then
  /nix/var/nix/profiles/default/bin/nix-daemon --daemon &>/tmp/nix-daemon.log &
  nix_daemon_pid=$!
  sleep 2
  if ! kill -0 "$nix_daemon_pid" 2>/dev/null; then
    log "post-start: failed to start nix-daemon; see /tmp/nix-daemon.log"
    exit 1
  fi
  if command -v nix >/dev/null 2>&1; then
    for _ in {1..5}; do
      nix store ping >/dev/null 2>&1 && break
      sleep 1
    done
  fi
fi

# Pre-pull Supabase images once per workspace to avoid repeated heavy pulls.
mkdir -p "$(dirname "$PREPULL_MARKER")"
if [ -f "$PREPULL_MARKER" ]; then
  log "post-start: Supabase pre-pull already completed; skipping"
  exit 0
fi

if ! command -v devbox >/dev/null 2>&1; then
  log "post-start: devbox not found; skipping Supabase pre-pull"
  exit 0
fi

log "post-start: waiting for Docker daemon (timeout ${DOCKER_WAIT_SECONDS}s)..."
ready=false
for _ in $(seq 1 "$DOCKER_WAIT_SECONDS"); do
  if devbox run -- docker info >/dev/null 2>&1; then
    ready=true
    break
  fi
  sleep 1
done

if [ "$ready" != true ]; then
  log "post-start: Docker not reachable yet; will retry on next container start"
  exit 0
fi

log "post-start: Docker is ready; pre-pulling Supabase images..."
if devbox run -- sh -lc "cd '$ROOT' && supabase start && supabase stop"; then
  touch "$PREPULL_MARKER"
  log "post-start: Supabase image pre-pull complete"
else
  log "post-start: Supabase pre-pull failed; will retry on next container start"
fi
