#!/bin/sh
set -e

REPO_URL="https://deb.fbxl.net"
FREEBASIC_VERSION="1.20.1"
PACKAGE_BUILD="1"

if [ "$(id -u)" -eq 0 ]; then
    SUDO=""
elif command -v sudo >/dev/null 2>&1; then
    SUDO="sudo"
else
    echo "Please run this script as root or install sudo." >&2
    exit 1
fi

if [ -r /etc/slackware-version ]; then
    SLACKWARE_VERSION=$(sed 's/^Slackware //' /etc/slackware-version | awk '{print $1}')
else
    echo "Could not determine Slackware version from /etc/slackware-version" >&2
    exit 1
fi

case "$(uname -m)" in
    x86_64)
        ARCH="x86_64"
        ;;
    i?86)
        ARCH="i586"
        ;;
    aarch64|arm64)
        ARCH="aarch64"
        ;;
    *)
        echo "Unsupported Slackware architecture: $(uname -m)" >&2
        exit 1
        ;;
esac

PACKAGE="freebasic-${FREEBASIC_VERSION}-${ARCH}-${PACKAGE_BUILD}.txz"
PACKAGE_URL="${REPO_URL}/linux/slackware/${SLACKWARE_VERSION}/${ARCH}/${PACKAGE}"
TMP_PACKAGE="/tmp/${PACKAGE}"

fetch_url() {
    if command -v curl >/dev/null 2>&1; then
        if curl -fsSLo "$2" "$1"; then
            return 0
        fi

        echo "curl could not verify the HTTPS download; retrying with certificate checks disabled." >&2
        curl -k -fsSLo "$2" "$1"
    elif command -v wget >/dev/null 2>&1; then
        if wget -q -O "$2" "$1"; then
            return 0
        fi

        echo "wget could not verify the HTTPS download; retrying with certificate checks disabled." >&2
        wget --no-check-certificate -q -O "$2" "$1"
    else
        echo "Please install curl or wget so this script can download FreeBASIC." >&2
        exit 1
    fi
}

install_build_deps() {
    if command -v gcc >/dev/null 2>&1 && command -v as >/dev/null 2>&1 && command -v ld >/dev/null 2>&1; then
        return 0
    fi

    if ! command -v slackpkg >/dev/null 2>&1; then
        echo "FreeBASIC needs the Slackware C toolchain to compile programs." >&2
        echo "Install binutils, ca-certificates, gcc, glibc, kernel-headers, and make, then rerun this script." >&2
        exit 1
    fi

    echo "Installing Slackware build dependencies with slackpkg..."
    $SUDO slackpkg -batch=on -default_answer=y update gpg
    $SUDO slackpkg -batch=on -default_answer=y update
    $SUDO slackpkg -batch=on -default_answer=y install binutils ca-certificates gcc glibc kernel-headers make

    if command -v update-ca-certificates >/dev/null 2>&1; then
        $SUDO update-ca-certificates --fresh >/dev/null 2>&1 || true
    fi
}

echo "Using FreeBASIC package for Slackware ${SLACKWARE_VERSION}/${ARCH}"
install_build_deps
fetch_url "$PACKAGE_URL" "$TMP_PACKAGE"
$SUDO upgradepkg --install-new "$TMP_PACKAGE"
rm -f "$TMP_PACKAGE"

fbc -version
