#!/bin/bash
if [ $# -ne 1 ] ; then
    echo "syntax: $0 image.ext"
    exit 1
fi
WEB=~/public_html/erode
temp=$(echo $1 | rev | cut -f 2- -d '.' | rev)
IMAGE=$(basename $temp)
rm -f ${WEB}/* ${IMAGE}*.png ${IMAGE}*.svg

convert -threshold "50%" -depth 1 $1 -bordercolor White -border 10x10 ${IMAGE}10000.png
convert ${IMAGE}10000.png +negate ${IMAGE}-final.png
cp ${IMAGE}10000.png ${WEB}/${IMAGE}-final.png

((a = 10000))
((b =  9999))

while [ $a -gt 0 ] ; do
  #echo "./morph -m binary -t erode ${IMAGE}$a.png ${IMAGE}$b.png"
  cp ${IMAGE}$a.png ${IMAGE}$a-anim.png
  ./morph -m binary -t dilate ${IMAGE}$a.png ${IMAGE}$b.png

  convert ${IMAGE}$a.png ${IMAGE}$b.png -compose Difference -composite line.png
  cp line.png ${IMAGE}$a-delta.png
  # WTF??? https://github.com/autotrace/autotrace/issues/5
  # autotrace --centerline --filter-iterations 0 --error-threshold 1 -input-format WTF ${IMAGE}$a-delta.png --output-format svg > ${IMAGE}$a.svg
  autotrace --filter-iterations 0 --error-threshold 1 -input-format WTF ${IMAGE}$a-delta.png --output-format svg > ${IMAGE}$a.svg
  head -2 ${IMAGE}$a.svg > HEADER.svg
  ecce HEADER.svg <<EOF > /dev/null 2>&1
u2/width/i/ /
g2
<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
m-0mj
%c
EOF
  tail -1 ${IMAGE}$a.svg > FOOTER.svg
  ecce ${IMAGE}$a.svg <<EOF > /dev/null 2>&1
u2/width/i/ /
g2
<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
m-0mj
%c
EOF
  ./morph -m binary -t dilate line.png line1.png
  convert line1.png -fill red -opaque white line2.png
  convert line2.png -transparent black line3.png
  cp line.png ${IMAGE}$a-line.png
  cp line1.png ${IMAGE}$a-line1.png
  cp line2.png ${IMAGE}$a-line2.png
  cp line3.png ${IMAGE}$a-line3.png
  ##GT##convert ${IMAGE}$a.png line3.png -compose over -composite ${IMAGE}$a.png
  identify -verbose line3.png | grep -v " 0: " | fgrep "#FF0000"
  if (( $? == 1 ))
  then
    rm -f ${IMAGE}$b.png
    ((b = 1))
    # shuffle the filenames back so they start at 1...
    while (( a <= 10000 ))
    do
      ( cat HEADER.svg; fgrep path ${IMAGE}$a.svg ; cat FOOTER.svg ) > ${IMAGE}$b.svg
      mv ${IMAGE}$a-delta.png ${IMAGE}$b-delta.png

      mv ${IMAGE}$a-line.png ${IMAGE}$b-line.png
      mv ${IMAGE}$a-line1.png ${IMAGE}$b-line1.png
      mv ${IMAGE}$a-line2.png ${IMAGE}$b-line2.png
      mv ${IMAGE}$a-line3.png ${IMAGE}$b-line3.png

      convert ${IMAGE}$a-anim.png +negate ${IMAGE}$b-anim.png
      ##
      convert ${IMAGE}$a.png +negate ${IMAGE}$b.cumul.png
      ((a += 1))
      ((b += 1))
    done
    cp ${IMAGE}-final.png ${IMAGE}$b-anim.png
    ffmpeg -loglevel quiet -y -r 8 -i "${IMAGE}%d-anim.png" ${IMAGE}-cumul.mp4 & # -q:v 8
    FF_PID=$!
    ffmpeg -loglevel quiet -y -r 8 -i "${IMAGE}%d-delta.png" ${IMAGE}-toolpath.mp4
    wait $FF_PID
    rm -f ${IMAGE}.mp4
    ffmpeg -loglevel quiet \
	-i ${IMAGE}-cumul.mp4 \
	-i ${IMAGE}-toolpath.mp4 \
	-filter_complex '[0:v]pad=iw*2:ih[int];[int][1:v]overlay=W/2:0[vid]' \
	-map [vid] \
	-c:v libx264 \
	-crf 23 \
	-preset veryfast \
	  ${IMAGE}.mp4
    #ffmpeg -loglevel quiet -y -r 8 -i "${IMAGE}%d-line.png" ${IMAGE}-line.mp4 &
    #FF_PID=$!
    #ffmpeg -loglevel quiet -y -r 8 -i "${IMAGE}%d-line1.png" ${IMAGE}-line1.mp4
    #wait $FF_PID
    #ffmpeg -loglevel quiet -y -r 8 -i "${IMAGE}%d-line2.png" ${IMAGE}-line2.mp4 &
    #FF_PID=$!
    #ffmpeg -loglevel quiet -y -r 8 -i "${IMAGE}%d-line3.png" ${IMAGE}-line3.mp4
    #wait $FF_PID
    cp ${IMAGE}[0-9]*.png ${WEB}/
    cp ${IMAGE}*.svg ${WEB}/
    cp ${IMAGE}*.mp4 ${WEB}/
    rm -f HEADER.svg FOOTER.svg line.png line1.png line2.png line3.png image-final.png
    #rm -f ${IMAGE}*.svg
    rm -f ${IMAGE}*.png
    rm -f ${WEB}/${IMAGE}*.png ${WEB}/${IMAGE}*.svg
    rm -f ${IMAGE}-*.mp4
    exit 0
  fi
  ((a -= 1))
  ((b -= 1))
done
