#!/usr/bin/env bash

######
# FILE NAME: wav2mp4.sh
#
# Authors:
#    Gustav Hartvigsson 2024
#    Distributed under the Cool Licence 1.1
#
# Changes
#
# 2021-01-31:
#   * Fixed up if statments
#   * Removed eval.
#
# 2022-03-22:
#   * Make script work with gifs, and Make gifs loop.
#
# 2024-07-10:
#   * Fixed some formating errors.
#   * Added sanity check.
#   * Use /tmp/ instead of writing to FS.
######

__SANITY=true

# FIXME: Use mktemp or mkdtemp instea of usin /tmp/ directly
__TMP_IMAGE_NAME=/tmp/__SPEAKER_IMAGE.PNG
__OUT_NAME=""
__IN_NAME=""

__USE_DIFFERENT_IMAGE=false
__OTHER_IMAGE_NAME=""

__LOOP=false

function __usage () {
  echo "wav2mp4.sh --- Convert audio to a video for upload. "
  echo " "
  echo "-i <audio.wav>        The input audio."
  echo " "
  echo "-o <video.mp4>        The output for the video."
  echo " "
  echo "--image <image.[png,gif]>"
  echo "                      Image to use. If none is provided a standard image"
  echo "                      will be used."
  echo ""
  exit 0
}

function __silent () {
  $@ >> /dev/null 2>&1
  return $?
}

function __sanity_check () {
  # Check that we have the tools needed.
  ___silent which ffmpeg 

  if [[ $? -gt 0 ]]; then
    echo "    Can't find tool \"ffmpeg\" (Required)."
    __SANITY=false
  fi
  
  if [[ $___SANITY == false ]]; then
    echo "Please install the missing tools."
    echo ""
    exit 1
  fi
}

function __do_cleanup () {
  rm $__TMP_IMAGE_NAME
}

function __do_convertion_gif () {
  ffmpeg\
         -i "$__IN_NAME"\
         -ignore_loop 0\
         -i "$__TMP_IMAGE_NAME"\
         -c:v libx264 -tune stillimage\
         -c:a aac -b:a 256k -pix_fmt yuv420p\
         -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -shortest\
         "$__OUT_NAME"
}

function __do_convertion () {
  
  case $__TMP_IMAGE_NAME in
    ## FIXME: See if there are othre fileformats that need looping and such.
    *.gif)
      __do_convertion_gif
    ;;
    *)
    
    ffmpeg -loop 1\
           -i "$__TMP_IMAGE_NAME"\
           -i "$__IN_NAME"\
           -c:v libx264 -tune stillimage\
           -c:a aac -b:a 256k -pix_fmt yuv420p\
           -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -shortest\
           "$__OUT_NAME"
    ;;
  esac
}


function __parse_args () {
  if [[ -z "$1" ]]
  then
    echo "Try --help or -h."
    exit 1
  fi
  
  
  while [[ $# -gt 0 ]]
  do
    
    case "${1}" in
      -i)
        __IN_NAME="$2"
      shift
      shift
      ;;
      -o)
        __OUT_NAME="$2"
      shift
      shift
      ;;
      --image)
        __USE_DIFFERENT_IMAGE=true
        __OTHER_IMAGE_NAME="$2"
      shift
      shift
      ;;
      --loop)
        __LOOP=true
      shift
      ;;
      -h|--help)
        __usage
      exit
      shift
      ;;
      *)
        __usage
      exit 1
      shift
      ;;
      --)
      shift
      break
      ;;
    esac
  done
}


function __write_image () {
  __IMAGE_BASE64="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"
  
  echo $__IMAGE_BASE64 | base64 -d -i > $__TMP_IMAGE_NAME
  
}


function __main () {
  __sanity_check
  __parse_args "${@}"

  if [[ $__USE_DIFFERENT_IMAGE == true ]]
  then
    # Let's not make this any more complicated.
    __TMP_IMAGE_NAME=$__OTHER_IMAGE_NAME
  else
    __write_image
  fi
  
  if [[ ! -e "$__IN_NAME" ]]
  then
    echo "missing input audio. Please provide."
    exit 1
  fi
  
  if [[ $__OUT_NAME == "" ]]
  then
    echo "missing output file name. Please provide."
    exit 1
  fi
  
  __do_convertion
  
  if [[ $__USE_DIFFERENT_IMAGE == false ]]
  then
    __do_cleanup
  fi
}

__main "${@}"
