#!/usr/bin/env dash

download_to_down() {
    DOWNLOAD_DIRECTORY="%XDG_MUSIC_DIR/down/spotify"

    already_downloaded_files="$(mktmp)"
    fd . "$DOWNLOAD_DIRECTORY" --exclude spotdl.log --exclude spotdl-errors.log >"$already_downloaded_files"
    if [ -z "$NO_CHECK" ] && [ "$(wc -l <"$already_downloaded_files")" -ne 0 ]; then
        die "something is already downloaded"
    fi
    # [ -e "$DOWNLOAD_DIRECTORY/spotdl.log" ] && rm "$DOWNLOAD_DIRECTORY/spotdl.log"

    download "$1" "$DOWNLOAD_DIRECTORY"
}

download() {
    download_url="$1"
    output_path="$2"

    config="$(mktmp)"
    cat <<EOF | clean >"$config"
# Main options
--audio slider-kz bandcamp youtube-music piped youtube soundcloud
--lyrics genius musixmatch azlyrics synced

# FFmpeg options
--ffmpeg ffmpeg
--threads 16
--bitrate 256k

# Spotify options
--cache-path %XDG_CACHE_HOME/spotdl/.spotipy

# Output options
--preload
--format opus
--output {artists}_-_{title}
--print-errors
--save-errors $output_path/spotdl-errors.log
# TODO: Reactive whence spotdl support for these has improved <2023-12-19>
# --generate-lrc
--overwrite skip

# Misc options
--log-level INFO
EOF

    cd "$output_path" || die "BUG: no $output_path"
    touch "$output_path/spotdl-errors.log"

    # The sub shell needs to be unquoted, as the arguments may not be treated as one.
    # shellcheck disable=2046
    unbuffer spotdl $(cat "$config") download "$download_url" | tee "$output_path/spotdl.log"

    [ -d ~/.spotdl ] && rm -r ~/.spotdl
}

# vim: ft=sh