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

CLI=(dotnet /zfszero/fuwa/TwitchDownloader/TwitchDownloaderCLI/out/TwitchDownloaderCLI.dll)
files=(
  "all_videos.txt"
  "clips.txt"
  "highlights.txt"
  "past_broadcasts.txt"
  "uploads.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))
    printf "Progress: %d/%d\r" "$current" "$total"
    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
    fi

    if [[ ! -f "$chat_out" ]]; then
      "${CLI[@]}" chatdownload --id "$url" --output "$chat_out" || { echo "$url" >> "$failed"; continue; }
    fi

  done < "$f"
done

echo
