#!/bin/bash

# burn a CD from one or more FLAC files

#TODO: option to do "cdrdao simulate" instead of "write"?
COMMAND=write

#TODO: option to normalize the wav files?

if [ $# -eq 0 ]; then
    echo "Need at least one FLAC file"
    exit 127
fi

# use a tmp dir for the cdda and toc files
BURNFLAC_TMP=`mktemp -d -p /tmp burnflac.XXXXXX`
#echo $BURNFLAC_TMP

# counter for the wav files
i=0

TOC_FILE="$BURNFLAC_TMP/cdda.toc"
echo "CD_DA" > $TOC_FILE

# shift off the arguments one by one
while [ $# -gt 0 ]; do
    let i=$i+1
    
    FLAC_FILE=$1
    WAV_FILE="$BURNFLAC_TMP/cdda-$i.wav"

    shift

    if [ ! -r $FLAC_FILE ]; then
	echo "$FLAC_FILE not found"
	exit 192
    fi

    CUESHEET=$(metaflac --export-cuesheet-to - $FLAC_FILE 2> /dev/null)

    if [[ -z $CUESHEET ]]; then
	# no cuesheet in the FLAC file
	# fake up a one-track TOC file
	cat <<END >> $TOC_FILE
TRACK AUDIO
FILE "$WAV_FILE" 0
END
    else
	# substitute the wav filename for the flac filename
	echo "$CUESHEET" \
	| perl -pe'BEGIN { $wav = shift; } s/\".*?\" FLAC/$wav WAVE/' "$WAV_FILE" \
	| cue2toc - \
	| sed s/CD_DA// \
	>> $TOC_FILE
    fi

    flac -d -o $WAV_FILE $FLAC_FILE

done

cdrdao $COMMAND --eject $TOC_FILE

rm -rf $BURNFLAC_TMP
