#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash -p rsync -p sane-scripts.sync-music

usage() {
  echo "sync [flags ...] <host> [<host> ...] [passthrough flags ...]"
  echo "where:"
  echo "  host: all|desko|lappy|moby"
  exit 1
}

debug() {
  if [ -n "$SYNC_DEBUG" ]; then
    echo "$@"
  fi
}

ifExists() {
  local path="$1"
  shift
  local cmd="$@"
  if test -d "$path"; then
    debug "${cmd[@]}"
    ${cmd[@]}
  else
    debug "skipping action because $path doesn't exist"
  fi
}

syncHost() {
  local host=$1
  shift
  local syncFlags=("$@")
  case "$host" in
    (desko)
      ifExists /mnt/servo/media/Music/Various.Artists \
        sane-sync-music --compat /mnt/servo/media/Music /mnt/desko/home/Music "${syncFlags[@]}"
      ;;
    (lappy)
      ifExists /mnt/servo/media/Music/Various.Artists \
        sane-sync-music --compress --compat /mnt/servo/media/Music /mnt/lappy/home/Music "${syncFlags[@]}"
      ;;
    (moby)
      # copy photos/screenshots from moby to desko:
      rsync -arv --exclude servo-macros /mnt/moby/home/Pictures/ /mnt/desko/home/Pictures/from/moby/
      # copy books from servo to moby; delete old/untracked ones, but keep KOreader state files (sdr)
      ifExists /mnt/servo/media/Books/Books \
        rsync -arv --delete --exclude '*.sdr' /mnt/servo/media/Books/ /mnt/moby/home/Books/local/servo/
      # copy music
      ifExists /mnt/servo/media/Music/Various.Artists \
        sane-sync-music --compat /mnt/servo/media/Music /mnt/moby/home/Music "${syncFlags[@]}"
      ;;
    (*)
      usage
      ;;
  esac
}

hosts=()
passthruArgs=()
parseArgs() {
  while [[ $# -ge 1 ]]; do
    local arg=$1
    case $arg in
      (desko|lappy|moby)
        hosts+=("$arg")
        shift
        ;;
      (all)
        hosts+=(desko lappy moby)
        shift
        ;;
      (--verbose)
        if [[ "${#hosts[@]}" -eq 0 ]]; then
          SYNC_DEBUG=1
          shift
        else
          # it's a passthru flag
          break
        fi
        ;;
      (--help)
        usage
        shift
        ;;
      (*)
        break
        ;;
    esac
  done
  passthruArgs+=("$@")
}

parseArgs "$@"
debug "hosts:" "${hosts[@]}"
for host in "${hosts[@]}"; do
  syncHost "$host" "${passthruArgs[@]}"
done
