#!/usr/bin/env bash
set -euo pipefail

IMAGE_TAG="${IMAGE_TAG:-maya3-pipeline:local}"
OUTPUT_DIR="${OUTPUT_DIR:-./output}"
GPU_DEVICE="${GPU_DEVICE:-0}"
E2E="${E2E:-0}"
R2_UPLOAD="${R2_UPLOAD:-0}"

if ! command -v docker >/dev/null 2>&1; then
  echo "Error: docker is not installed or not on PATH."
  exit 1
fi

if [ ! -f ".env" ]; then
  echo "Error: .env not found. Create one from .env.example before running this."
  exit 1
fi

echo "==> Building image: ${IMAGE_TAG}"
docker build -t "${IMAGE_TAG}" .

echo "==> Basic entrypoint check (help output)"
docker run --rm --gpus all --env-file .env "${IMAGE_TAG}" --help >/dev/null

echo "==> GPU + imports smoke test"
docker run --rm --gpus all --env-file .env \
  --entrypoint /workspace/maya3_data/.venv/bin/python \
  "${IMAGE_TAG}" -c "import torch; print('torch', torch.__version__); print('cuda_available', torch.cuda.is_available()); print('gpu_count', torch.cuda.device_count())"

echo "==> Supabase connectivity smoke test"
docker run --rm --gpus all --env-file .env \
  --entrypoint /workspace/maya3_data/.venv/bin/python \
  "${IMAGE_TAG}" -c "from src.supabase_client import SupabaseClient; print(SupabaseClient().get_stats())"

echo "==> R2 connectivity smoke test"
docker run --rm --gpus all --env-file .env \
  --entrypoint /workspace/maya3_data/.venv/bin/python \
  "${IMAGE_TAG}" -c "from src.r2_client import R2Client; print('source_bucket', R2Client(bucket_type='source').bucket); print('production_bucket', R2Client(bucket_type='production').bucket)"

if [ "${E2E}" = "1" ]; then
  mkdir -p "${OUTPUT_DIR}"
  ts="$(date +%Y%m%d_%H%M%S)"
  upload_prefix="smoke_test/${ts}"

  extra_args=(
    --supabase-queue
    --gpus "${GPU_DEVICE}"
    --workers-per-gpu 1
    --max-videos 1
    --background-export
    --export-workers 2
    --output ./output
  )

  if [ "${R2_UPLOAD}" = "1" ]; then
    extra_args+=(
      --r2-upload
      --r2-upload-prefix "${upload_prefix}"
      --r2-upload-skip-if-exists
    )
  fi

  echo "==> E2E test: process 1 Supabase-queued video on GPU ${GPU_DEVICE}"
  docker run --rm \
    --gpus "device=${GPU_DEVICE}" \
    --shm-size 16g \
    --env-file .env \
    -v "${OUTPUT_DIR}:/workspace/maya3_data/output" \
    "${IMAGE_TAG}" "${extra_args[@]}"

  latest_tar="$(ls -t "${OUTPUT_DIR}"/*.tar 2>/dev/null | head -n 1 || true)"
  if [ -z "${latest_tar}" ]; then
    echo "Warning: no .tar found in ${OUTPUT_DIR} (maybe R2 upload deleted it, or export disabled)."
    exit 0
  fi

  echo "==> Verifying TAR does not contain _original.flac: ${latest_tar}"
  if tar -tf "${latest_tar}" | grep -q '_original\.flac$'; then
    echo "FAIL: _original.flac found inside ${latest_tar}"
    exit 2
  fi
  echo "OK: _original.flac not present in TAR"
fi

echo "==> Done"

