#!/usr/bin/env bash
set -euo pipefail

readonly OLD_DEP='libgdk-pixbuf2.0-0 (>= 2.22.0)'
readonly NEW_DEP='libgdk-pixbuf2.0-0 (>= 2.22.0) | libgdk-pixbuf-2.0-0 (>= 2.22.0)'
readonly VERSION_SUFFIX='+ubuntu26fix1'

if (( $# < 1 || $# > 2 )); then
    printf 'Usage: %s INPUT.deb [OUTPUT.deb]\n' "${0##*/}" >&2
    exit 2
fi

input=$1
output=${2:-${input%.deb}-patched.deb}

if [[ ! -f "$input" ]]; then
    printf 'Error: file not found: %s\n' "$input" >&2
    exit 1
fi

if [[ -e "$output" ]]; then
    printf 'Error: output file already exists: %s\n' "$output" >&2
    exit 1
fi

if [[ $(dpkg-deb -f "$input" Package) != minecraft-launcher ]]; then
    printf 'Error: input is not a minecraft-launcher package.\n' >&2
    exit 1
fi

version=$(dpkg-deb -f "$input" Version)
if [[ "$version" == *"$VERSION_SUFFIX" ]]; then
    printf 'Error: this package is already patched.\n' >&2
    exit 1
fi

workdir=$(mktemp -d "${TMPDIR:-/tmp}/minecraft-deb-patch.XXXXXX")
trap 'rm -rf -- "$workdir"' EXIT

dpkg-deb -R "$input" "$workdir/root"
control="$workdir/root/DEBIAN/control"

if [[ $(grep -Foc "$OLD_DEP" "$control") -ne 1 ]]; then
    printf 'Error: expected dependency is missing or ambiguous. Package was not modified.\n' >&2
    exit 1
fi

sed -i \
    -e "s/^Version: .*/Version: ${version}${VERSION_SUFFIX}/" \
    -e "s/$OLD_DEP/$NEW_DEP/" \
    "$control"

dpkg-deb --root-owner-group --build "$workdir/root" "$workdir/patched.deb"
mv -- "$workdir/patched.deb" "$output"

printf 'Package created: %s\n' "$output"
printf 'Version: %s%s\n' "$version" "$VERSION_SUFFIX"
