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

CLI=(dotnet /zfszero/fuwa/TwitchDownloader/TwitchDownloaderCLI/out/TwitchDownloaderCLI.dll)
files=(
  "highlights.txt"
  "past_broadcasts.txt"
  "uploads.txt"
  "all_videos.txt"
)

# count total URLs (non-empty lines)
total=0
for f in "${files[@]}"; do
  [[ -f "$f" ]] && total=$(( total + $(grep -cve '^\s*$' "$f") ))
done

current=0

for f in "${files[@]}"; do
  [[ -f "$f" ]] || continue
  dir="${f%.txt}"
  mkdir -p "$dir"
  failed="$dir/failed.txt"
  : > "$failed"

  while IFS= read -r url; do
    [[ -z "$url" ]] && continue
    current=$((current+1))
    echo "[$current/$total] Processing $url"

    id="${url##*/}"
    video_out="$dir/${id}.mp4"
    chat_out="$dir/${id}_chat.json"

    if [[ ! -f "$video_out" ]]; then
      if [[ "$url" == *"/clip/"* ]]; then
        "${CLI[@]}" clipdownload --id "$url" --output "$video_out" \
          || { echo "$url" >>"$failed"; continue; }
      else
        "${CLI[@]}" videodownload --id "$url" --output "$video_out" \
          || { echo "$url" >>"$failed"; continue; }
      fi
    else
      echo "    video already exists, skipping"
    fi

    if [[ ! -f "$chat_out" ]]; then
      "${CLI[@]}" chatdownload --id "$url" --output "$chat_out" \
        || { echo "$url" >>"$failed"; continue; }
    else
      echo "    chat already exists, skipping"
    fi

  done < "$f"
done

echo "Completed $current/$total"
