#!/bin/sh

bundle() {
    case "$1" in
        linux-x86_64)
            TARGET=x86_64-unknown-linux-musl
            export CGOUT="./target/$TARGET/release/stargazer"
            export CGFLAGS="--target=$TARGET --release"
            ;;
        linux-aarch64)
            export STRIP=aarch64-linux-gnu-strip
            export CG=cross
            export NO_AUDIT=true
            TARGET=aarch64-unknown-linux-musl
            export CGOUT="./target/$TARGET/release/stargazer"
            export CGFLAGS="--target=$TARGET --release"
            ;;
        linux-arm)
            export STRIP=aarch64-linux-gnu-strip
            export CG=cross
            export NO_AUDIT=true
            TARGET=arm-unknown-linux-musleabi
            export CGOUT="./target/$TARGET/release/stargazer"
            export CGFLAGS="--target=$TARGET --release"
            ;;
        linux-armhf)
            export STRIP=aarch64-linux-gnu-strip
            export CG=cross
            export NO_AUDIT=true
            TARGET=arm-unknown-linux-musleabihf
            export CGOUT="./target/$TARGET/release/stargazer"
            export CGFLAGS="--target=$TARGET --release"
            ;;
        linux-armv7)
            export STRIP=aarch64-linux-gnu-strip
            export CG=cross
            export NO_AUDIT=true
            TARGET=armv7-unknown-linux-musleabihf
            export CGOUT="./target/$TARGET/release/stargazer"
            export CGFLAGS="--target=$TARGET --release"
            ;;
        freebsd)
            TARGET=x86_64-unknown-freebsd
            ;;
        freebsd-cross)
            export STRIP=skip-strip
            export CG=cross
            TARGET=x86_64-unknown-freebsd
            export CGOUT="./target/$TARGET/release/stargazer"
            export CGFLAGS="--target=$TARGET --release"
            ;;
        linux)
            echo "Building all Linux targets"
            bundle linux-x86_64 "$2" "$3" 
            bundle linux-aarch64 "$2" "$3"
            bundle linux-arm "$2" "$3"
            bundle linux-armhf "$2" "$3"
            bundle linux-armv7 "$2" "$3"
            exit 0
            ;;
        "")
            case "$(uname)" in
                Linux)
                    bundle linux "$2" "$3"
                    exit 0
                    ;;
                FreeBSD)
                    bundle freebsd "$2" "$3"
                    exit 0
                    ;;
                *)
                    echo Unknow OS, please specify target
                    exit 1
                    ;;
            esac
            ;;
        *)
            echo Invalid target specified
            exit 1
            ;;
    esac

    echo Building stargazer for target $TARGET
    ./scripts/build

    mkdir -p out
    install -Dm755 ${CGOUT:-'./target/release/stargazer'} ./out/stargazer
    install -Dm644 ./stargazer.1 ./out/stargazer.1
    install -Dm644 ./stargazer.ini.5 ./out/stargazer.ini.5
    install -Dm644 ./config.ini ./out/config.ini

    if [ -z "$3" ]; then
        TAG_NAME="$(git describe --tags $(git rev-list --tags --max-count=1))"
    else
        TAG_NAME="$3"
    fi

    echo "Bundling tag $TAG_NAME"

    cd out
    tar cvJf "../stargazer-$TAG_NAME-$TARGET.tar.xz" *
    cd ..

    rm -rf out

    echo "DBG $1 $2 $3"
    if [ "$2" = "upload" ]; then
        echo "Uploading artifact"
        hut git artifact upload --rev "$TAG_NAME" "./stargazer-$TAG_NAME-$TARGET.tar.xz"
    fi
}

bundle "$@"
