#!/bin/sh

# Testing lv2apply, lv2info and lv2ls from lilv-utils with mda ambience plugin
# using a wav file from csound-doc and testing the output wav file with ffmpeg

set -e

echo '(1/7) Test lv2ls'
if /usr/bin/lv2ls >/dev/null 2>&1; then
  echo "OK lv2ls works..."
else
  echo "ERROR: lv2ls failed" >&2
  exit 1
fi

echo '(2/7) Finding mda ambience plugin using lv2ls'
mda_ambience=$(/usr/bin/lv2ls | grep Ambience)
if [ -z "$mda_ambience" ]; then
  echo "ERROR: mda ambience plugin not found" >&2
  exit 1
else
  echo "Successfully found mda ambience plugin: $mda_ambience"
fi

echo '(3/7) Get info of mda ambience plugin using lv2info'
if mda_ambience_info=$(/usr/bin/lv2info "$mda_ambience" 2>&1); then
  echo "Found info for $mda_ambience"
else
  echo "ERROR: lv2info failed for $mda_ambience" >&2
  exit 1
fi

echo '(4/7) Look for lv2info keywords of mda ambience plugin'
if printf '%s\n' "$mda_ambience_info" | grep -Ei 'name|class|author|bundle|binary' >/dev/null 2>&1; then
  echo "$mda_ambience contains expected keywords"
else
  echo "ERROR: lv2info output did not contain expected keywords" >&2
  exit 1
fi

echo '(5/7) Extract beats.wav from csound-doc'
if cp /usr/share/doc/csound-doc/html/examples/beats.wav.gz .; then
    gunzip beats.wav.gz && echo "Successfully decompressed beats.wav.gz"
else
    echo "ERROR: Failed to copy beats.wav.gz" >&2
    exit 1
fi

echo "(6/7) Applying mda ambience plugin on beats.wav using lv2apply"
if lv2apply -i beats.wav -o beats_ambience.wav $mda_ambience 2>/dev/null; then
    echo "Successfully applied mda ambience plugin on beats.wav"
else
    echo "ERROR: Failed to apply mda ambience plugin" >&2
    exit 1
fi

echo "(7/7) Check if the output file is a valid WAV file using ffmpeg"
if ! ffmpeg -v error -i beats_ambience.wav -f null -; then
    echo "ERROR: beats_ambience.wav is not a valid WAV file" >&2
    exit 1
else
    echo "The beats_ambience.wav looks like a valid WAV file"
fi

exit 0
