#!/usr/bin/env bash
# ==============================================================================
# Automated Asset Downloader for ComfyUI Lab Recipe
# Recipe: Civitai #145918769: Touko Sakurai (My Senpai is Annoying) - Unholy Desire Mix Illustrious
# Origin: https://decomfy.com/civitai-touko-sakurai-unholy-desire-illustrious
# ==============================================================================
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-touko-sakurai-unholy-desire-illustrious"
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/checkpoints"
mkdir -p "${COMFY_DIR}/models/loras"

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

echo "==> Downloading required models and weights..."
  # unholyDesireMixSinister_v70.safetensors (6.62 GB) -> models/checkpoints/
  if [ ! -f "${COMFY_DIR}/models/checkpoints/unholyDesireMixSinister_v70.safetensors" ]; then
    echo "[+] Downloading unholyDesireMixSinister_v70.safetensors (6.62 GB)..."
    URL="https://civitai.com/api/download/models/2403075?fileId=2293653"
    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/checkpoints/unholyDesireMixSinister_v70.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/checkpoints/unholyDesireMixSinister_v70.safetensors"
  fi

  # touko-sakurai-s1-illustriousxl-lora-nochekaiser.safetensors (218 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/touko-sakurai-s1-illustriousxl-lora-nochekaiser.safetensors" ]; then
    echo "[+] Downloading touko-sakurai-s1-illustriousxl-lora-nochekaiser.safetensors (218 MB)..."
    URL="https://civitai.com/api/download/models/1753519?fileId=1654812"
    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/touko-sakurai-s1-illustriousxl-lora-nochekaiser.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/touko-sakurai-s1-illustriousxl-lora-nochekaiser.safetensors"
  fi

  # DetailerILv2-000008.safetensors (218 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/DetailerILv2-000008.safetensors" ]; then
    echo "[+] Downloading DetailerILv2-000008.safetensors (218 MB)..."
    URL="https://civitai.com/api/download/models/1736373?fileId=1636985"
    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/DetailerILv2-000008.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/DetailerILv2-000008.safetensors"
  fi

  # 748cmSDXL.safetensors (243 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/748cmSDXL.safetensors" ]; then
    echo "[+] Downloading 748cmSDXL.safetensors (243 MB)..."
    URL="https://civitai.com/api/download/models/1056404?fileId=961934"
    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/748cmSDXL.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/748cmSDXL.safetensors"
  fi

  # Niji_Semi_realism_F_N_R_epoch_10.safetensors (218 MB) -> models/loras/
  if [ ! -f "${COMFY_DIR}/models/loras/Niji_Semi_realism_F_N_R_epoch_10.safetensors" ]; then
    echo "[+] Downloading Niji_Semi_realism_F_N_R_epoch_10.safetensors (218 MB)..."
    URL="https://civitai.com/api/download/models/2854725?fileId=2740836"
    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/Niji_Semi_realism_F_N_R_epoch_10.safetensors"
  else
    echo "[OK] Found ${COMFY_DIR}/models/loras/Niji_Semi_realism_F_N_R_epoch_10.safetensors"
  fi

echo ""
echo "===================================================================="
echo "[SUCCESS] All recipe models and workflow have been synced!"
echo "Open ComfyUI, press 'Load' and select 'civitai-touko-sakurai-unholy-desire-illustrious.json' to run."
echo "===================================================================="
