#!/usr/bin/env bash
# ==============================================================================
# Automated Asset Downloader for ComfyUI Lab Recipe
# Recipe: Civitai #144554572: Wan 2.2 I2V & 8-LoRA Stack (White-Weapon Architecture)
# Origin: https://decomfy.com/civitai-wan-audio-v2v-sync
# ==============================================================================
set -euo pipefail

# 1. ComfyUI directory location (Defaults to current working directory)
COMFY_DIR="${1:-.}"

# 2. Civitai API key (Optional: Set export CIVITAI_TOKEN="your_key" if gated)
CIVITAI_TOKEN="${CIVITAI_TOKEN:-}"

echo "===================================================================="
echo "ComfyUI Lab: Downloading assets for: civitai-wan-audio-v2v-sync"
echo "Target ComfyUI root: ${COMFY_DIR}"
echo "===================================================================="

# Create required directories
echo "==> Ensuring model directories exist..."
mkdir -p "${COMFY_DIR}/user/default/workflows"
mkdir -p "${COMFY_DIR}/models/diffusion_models"
mkdir -p "${COMFY_DIR}/models/text_encoders"
mkdir -p "${COMFY_DIR}/models/vae"
mkdir -p "${COMFY_DIR}/models/loras"

# Download Workflow JSON
echo "==> Fetching Workflow Canvas JSON..."
curl -sSL "https://decomfy.com/api/workflows/civitai-wan-audio-v2v-sync.json" -o "${COMFY_DIR}/user/default/workflows/civitai-wan-audio-v2v-sync.json"
echo "[OK] Saved workflow to ${COMFY_DIR}/user/default/workflows/civitai-wan-audio-v2v-sync.json"

echo "==> Downloading required models and weights..."
  # wan2.1-i2v-14b-720p-Q4_K_M.gguf (10.56 GB) -> models/diffusion_models/
  if [ ! -f "${COMFY_DIR}/models/diffusion_models/wan2.1-i2v-14b-720p-Q4_K_M.gguf" ]; then
    echo "[+] Downloading wan2.1-i2v-14b-720p-Q4_K_M.gguf (10.56 GB)..."
    URL="https://huggingface.co/city96/Wan2.1-I2V-14B-720P-gguf/resolve/main/wan2.1-i2v-14b-720p-Q4_K_M.gguf"
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/diffusion_models/wan2.1-i2v-14b-720p-Q4_K_M.gguf"
  else
    echo "[OK] Found ${COMFY_DIR}/models/diffusion_models/wan2.1-i2v-14b-720p-Q4_K_M.gguf"
  fi

  # umt5_xxl_fp8_e4m3fn_scaled.safetensors (6.73 GB) -> models/text_encoders/
  if [ ! -f "${COMFY_DIR}/models/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors" ]; then
    echo "[+] Downloading umt5_xxl_fp8_e4m3fn_scaled.safetensors (6.73 GB)..."
    URL="https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors"
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors"
  fi

  # wan_2.1_vae.safetensors (254 MB) -> models/vae/
  if [ ! -f "${COMFY_DIR}/models/vae/wan_2.1_vae.safetensors" ]; then
    echo "[+] Downloading wan_2.1_vae.safetensors (254 MB)..."
    URL="https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/vae/wan_2.1_vae.safetensors"
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/vae/wan_2.1_vae.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/vae/wan_2.1_vae.safetensors"
  fi

  # Wan_2_2_I2V_A14B_HIGH_lightx2v_4step_lora_v1030_rank_64_bf16.safetensors (601 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/Wan_2_2_I2V_A14B_HIGH_lightx2v_4step_lora_v1030_rank_64_bf16.safetensors" ]; then
    echo "[+] Downloading Wan_2_2_I2V_A14B_HIGH_lightx2v_4step_lora_v1030_rank_64_bf16.safetensors (601 MB)..."
    URL="https://civitai.com/api/download/models/2361379"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/Wan_2_2_I2V_A14B_HIGH_lightx2v_4step_lora_v1030_rank_64_bf16.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/Wan_2_2_I2V_A14B_HIGH_lightx2v_4step_lora_v1030_rank_64_bf16.safetensors"
  fi

  # DR34ML4Y_I2V_14B_LOW_V2.safetensors (292 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/DR34ML4Y_I2V_14B_LOW_V2.safetensors" ]; then
    echo "[+] Downloading DR34ML4Y_I2V_14B_LOW_V2.safetensors (292 MB)..."
    URL="https://civitai.com/api/download/models/2553271"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/DR34ML4Y_I2V_14B_LOW_V2.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/DR34ML4Y_I2V_14B_LOW_V2.safetensors"
  fi

  # NSFW-22-H-e8.safetensors (585 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/NSFW-22-H-e8.safetensors" ]; then
    echo "[+] Downloading NSFW-22-H-e8.safetensors (585 MB)..."
    URL="https://civitai.com/api/download/models/2073605"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/NSFW-22-H-e8.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/NSFW-22-H-e8.safetensors"
  fi

  # wan22-m4crom4sti4-i2v-20epoc-high-k3nk.safetensors (292 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/wan22-m4crom4sti4-i2v-20epoc-high-k3nk.safetensors" ]; then
    echo "[+] Downloading wan22-m4crom4sti4-i2v-20epoc-high-k3nk.safetensors (292 MB)..."
    URL="https://civitai.com/api/download/models/2265575"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/wan22-m4crom4sti4-i2v-20epoc-high-k3nk.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/wan22-m4crom4sti4-i2v-20epoc-high-k3nk.safetensors"
  fi

  # WAN-2.2-I2V-POV-Body-Cumshot-Pullout-HIGH-v1.safetensors (585 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/WAN-2.2-I2V-POV-Body-Cumshot-Pullout-HIGH-v1.safetensors" ]; then
    echo "[+] Downloading WAN-2.2-I2V-POV-Body-Cumshot-Pullout-HIGH-v1.safetensors (585 MB)..."
    URL="https://civitai.com/api/download/models/2298673"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/WAN-2.2-I2V-POV-Body-Cumshot-Pullout-HIGH-v1.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/WAN-2.2-I2V-POV-Body-Cumshot-Pullout-HIGH-v1.safetensors"
  fi

  # 56Low noise-Cumshot Aesthetics.safetensors (292 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/56Low noise-Cumshot Aesthetics.safetensors" ]; then
    echo "[+] Downloading 56Low noise-Cumshot Aesthetics.safetensors (292 MB)..."
    URL="https://civitai.com/api/download/models/2116027"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/56Low noise-Cumshot Aesthetics.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/56Low noise-Cumshot Aesthetics.safetensors"
  fi

  # jfj-deepthroat-W22-I2V-HN.safetensors (219 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/jfj-deepthroat-W22-I2V-HN.safetensors" ]; then
    echo "[+] Downloading jfj-deepthroat-W22-I2V-HN.safetensors (219 MB)..."
    URL="https://civitai.com/api/download/models/2152516"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/jfj-deepthroat-W22-I2V-HN.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/jfj-deepthroat-W22-I2V-HN.safetensors"
  fi

  # wan2.2-i2v-oral-insertion-v1.0.safetensors (540 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/wan2.2-i2v-oral-insertion-v1.0.safetensors" ]; then
    echo "[+] Downloading wan2.2-i2v-oral-insertion-v1.0.safetensors (540 MB)..."
    URL="https://civitai.com/api/download/models/2121297"
    if [ -n "$CIVITAI_TOKEN" ]; then
      if [[ "$URL" == *"?"* ]]; then
        URL="${URL}&token=${CIVITAI_TOKEN}"
      else
        URL="${URL}?token=${CIVITAI_TOKEN}"
      fi
    fi
    curl -C - -L -f --retry 3 --progress-bar "$URL" -o "${COMFY_DIR}/models/loras/wan2.2-i2v-oral-insertion-v1.0.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/wan2.2-i2v-oral-insertion-v1.0.safetensors"
  fi

echo ""
echo "===================================================================="
echo "[SUCCESS] All recipe models and workflow have been synced!"
echo "Open ComfyUI, press 'Load' and select 'civitai-wan-audio-v2v-sync.json' to run."
echo "===================================================================="
