#!/bin/sh

set -eu

pg_version=17
repo=https://github.com/timescale/timescaledb.git
ref=main
workdir=${TMPDIR:-/tmp}

print() {
    printf '%s\n' "$*"
}

die() {
    print "$*" >&2
    exit 2
}

usage() {
    die 'install-timescaledb-mac [ -pg16 | -pg17 | -pg18 | -pg19] [ -pgconfig PATH ] [ -repo URL ] [ -ref REF ] [ -workdir DIR ]'
}

find_pg_config() {
    if [ -z "${pg_config:-}" ]; then
        pg_config=$(which "$(sed -ne 's/"//g' -e "s/^pg$pg_version *= *//p" ~/.pgrx/config.toml)")
    fi
    [ -x "$pg_config" ] || die "$pg_config not executable"
}

require_command() {
    command -v "$1" >/dev/null 2>&1 || die "$1 is required"
}

while [ $# -gt 0 ]; do
    arg="$1"
    shift
    case "$arg" in
        -pg1[6-9])
            pg_version=${arg#-pg}
            ;;
        -pgconfig)
            [ $# -gt 0 ] || usage
            pg_config="$1"
            shift
            ;;
        -repo)
            [ $# -gt 0 ] || usage
            repo="$1"
            shift
            ;;
        -ref)
            [ $# -gt 0 ] || usage
            ref="$1"
            shift
            ;;
        -workdir)
            [ $# -gt 0 ] || usage
            workdir="$1"
            shift
            ;;
        *)
            usage
            ;;
    esac
done

require_command git
require_command cmake

find_pg_config
bindir=$("$pg_config" --bindir)
sharedir=$("$pg_config" --sharedir)
pkglibdir=$("$pg_config" --pkglibdir)

srcdir=$(mktemp -d "$workdir/timescaledb-mac.XXXXXX")

print "Cloning TimescaleDB from $repo into $srcdir"
git clone "$repo" "$srcdir"
git -C "$srcdir" switch --detach "$ref"

print "Building TimescaleDB for $pg_config"
cmake -S "$srcdir" -B "$srcdir/build" \
    -DUSE_OPENSSL=0 \
    -DLINTER=0 \
    -DCMAKE_PROGRAM_PATH="$bindir"
cmake --build "$srcdir/build"

print "Installing TimescaleDB into $pkglibdir and $sharedir/extension"
cmake --build "$srcdir/build" --target install

[ -f "$sharedir/extension/timescaledb.control" ] || die "TimescaleDB install did not create $sharedir/extension/timescaledb.control"

print "Installed TimescaleDB for $pg_config"
