#!/usr/bin/env bash

usage() {
    echo -e "Build Jellyfin FFMPEG packages"
    echo -e " $0 <release> <arch>"
    echo -e "Releases:          Arches:"
    echo -e " * stretch          * amd64"
    echo -e " * buster           * armhf"
    echo -e " * xenial"
    echo -e " * bionic"
    echo -e " * cosmic"
}

if [[ -z ${1} ]]; then
    usage
    exit 1
fi

cli_release="${1}"
case ${cli_release} in
    'stretch')
        release="debian:stretch"
        gcc_version="6"
    ;;
    'buster')
        release="debian:buster"
        gcc_version="7"
    ;;
    'xenial')
        release="ubuntu:xenial"
        gcc_version="5"
    ;;
    'bionic')
        release="ubuntu:bionic"
        gcc_version="7"
    ;;
    'cosmic')
        release="ubuntu:cosmic"
        gcc_version="7"
    ;;
    *)
        echo "Invalid release."
        usage
        exit 1
    ;;
esac

cli_arch="${2}"
case ${cli_arch} in
    'amd64')
        arch="amd64"
    ;;
    'armhf')
        arch="armhf"
    ;;
    *)
        echo "Invalid architecture."
        usage
        exit 1
    ;;
esac

set -o xtrace
set -o errexit

image_name="jellyfin-ffmpeg-build-${cli_release}"
package_temporary_dir="$( mktemp -d )"
current_user="$( whoami )"

# Trap cleanup for latter sections
cleanup() {
    # Clean up the Dockerfile
    make -f Dockerfile.make clean
    # Remove tempdir
    rm -rf "${package_temporary_dir}"
}
trap cleanup EXIT INT

# Generate Dockerfile
make -f Dockerfile.make DISTRO=${release} GCC_VER=${gcc_version} ARCH=${arch}
# Set up the build environment docker image
docker build . -t "${image_name}"
# Build the APKs and copy out to ${package_temporary_dir}
docker run --rm -e "RELEASE=${release}" -v "${package_temporary_dir}:/dist" "${image_name}"
# Correct ownership on the APKs (as current user, then as root if that fails)
chown -R "${current_user}" "${package_temporary_dir}" &>/dev/null \
  || sudo chown -R "${current_user}" "${package_temporary_dir}" &>/dev/null
# Move the APKs to the parent directory
mkdir ../bin &>/dev/null || true
mmv "${package_temporary_dir}/deb/*.deb" "../bin/#1.deb"
mmv "${package_temporary_dir}/deb/*_${arch}.*" "../bin/#1-${cli_release}_${arch}.#2"
