#!/bin/bash

# Per https://lwn.net/Articles/895488/
# Version 1.2 of the Inkscape drawing tool has been released. New
# features include multi-page support, editable markers, the ability to
# flow text around shapes, and more; see the release notes for details.

set -eu
set -o pipefail

function usage
{
    retval="$1"
    case "$retval" in
        0)
            ;;
        1)
            exec 1>&2
            ;;
        *)
            echo "$0: Internal error: bad \$retval: $retval" 1>&2
            exit 1
            ;;
    esac
    echo "$0: --split-to-svgs file.pdf --combine-svgs-to-pdf file.pdf --tempdir /where/ever"
    exit "$retval"
}

pdf=""
mode=""
tempdir="."

while [ "$#" -ge 1 ]
do
    case "$1" in
        --split-to-svgs)
            mode=split-to-svgs
            pdf="$2"
            shift
            ;;
        --combine-svgs-to-pdf)
            mode=combine-svgs-to-pdf
            pdf="$2"
            shift
            ;;
        --tempdir)
            tempdir="$2"
            shift
            ;;
        -h|--help)
            usage 0
            ;;
        *)
            echo "$0: Unrecognized option: $1" 1>&2
            usage 1
            ;;
    esac
    shift
done

# convert $pdf to an absolute path
case "$pdf" in
    /*)
        ;;
    *)
        pdf="$(pwd)/$pdf"
esac

for dependency in pdfseparate pdfunite inkscape
do
    if type "$dependency" > /dev/null 2>&1
    then
        :
    else
        echo "$0: Could not find $dependency" 1>&2
        exit 1
    fi
done

case "$mode" in
    "")
        echo "$0: You must specify --split-to-svgs or --combine-svgs-to-pdf" 1>&2
        usage 1
        ;;
    split-to-svgs)
        if [ -d "$tempdir" ]
        then
            echo "$0: Good $tempdir exists"
        else
            echo "$0: $tempdir does not exist - create it?"
            read -r yn
            lowercase_yn=$(echo "$yn" | tr '[:upper:]' '[:lower:]')
            case "$lowercase_yn" in
                y*)
                    mkdir -p "$tempdir"
                    ;;
                *)
                    echo 1
                    ;;
            esac
        fi
        cd "$tempdir"

        # pdftk appears to split to pg_xxxx.pdf where x is a digit.
        # pdftk "$pdf" burst
        pdfseparate "$pdf" page-'%03d'.pdf
        for i in page-*.pdf
        do
            # shellcheck disable=SC2001
            echo "$i" | \
                sed 's/\(.*\)\.pdf/inkscape "\1.pdf" --export-plain-svg --export-type svg --export-filename "\1"/'
        done | sh -x
        rm ./page-*.pdf
        # rm doc_data.txt
        echo "$0: svg files are in $tempdir"
        ;;
    combine-svgs-to-pdf)
        for i in *.svg
        do
            # shellcheck disable=SC2001
            echo "$i" | \
                sed 's/\(.*\)\.svg/inkscape "\1.svg" --export-pdf="\1.pdf"/'
        done | sh -x
        # rm *.svg
        # pdftk ./*.pdf cat output "$pdf"
        pdfunite page-*.pdf "$pdf"
        rm ./page-*.pdf
        ;;
    *)
        echo "$0: Internal error: \$mode invalid: $mode" 1>&2
        ;;
esac