#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
umask 022

REPO_URL="https://repo.onepanel.swister.in"
KEY_URL="${REPO_URL}/onepanel-archive-keyring.gpg"
KEYRING="/usr/share/keyrings/onepanel-archive-keyring.gpg"
SOURCE_FILE="/etc/apt/sources.list.d/onepanel.list"

if [[ ${EUID} -ne 0 ]]; then
    echo "OnePanel bootstrap must run as root." >&2
    echo "Use: curl -fsSL https://get.onepanel.swister.in | sudo bash" >&2
    exit 2
fi

for cmd in curl apt-get dpkg install mktemp; do
    command -v "$cmd" >/dev/null 2>&1 || {
        echo "Required command is missing: $cmd" >&2
        exit 2
    }
done

case "$(dpkg --print-architecture)" in
    amd64|arm64) ;;
    *)
        echo "Unsupported architecture: $(dpkg --print-architecture)" >&2
        echo "OnePanel APT repository currently publishes amd64 and arm64 indexes." >&2
        exit 2
        ;;
esac

TMP_KEY="$(mktemp)"
trap 'rm -f "$TMP_KEY"' EXIT

printf '\n  * OnePanel\n'
printf '  Preparing the official OnePanel APT source...\n\n'

curl --fail --silent --show-error --location \
    --proto '=https' --tlsv1.2 \
    "$KEY_URL" -o "$TMP_KEY"

if [[ ! -s "$TMP_KEY" ]]; then
    echo "Downloaded OnePanel repository key is empty." >&2
    exit 1
fi

install -d -o root -g root -m 0755 /usr/share/keyrings /etc/apt/sources.list.d
install -o root -g root -m 0644 "$TMP_KEY" "$KEYRING"

printf '%s\n' \
  "deb [arch=$(dpkg --print-architecture) signed-by=${KEYRING}] ${REPO_URL} stable main" \
  > "$SOURCE_FILE"
chmod 0644 "$SOURCE_FILE"

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y onepanel

printf '\n  OnePanel launcher installed successfully.\n\n'
printf '  Next command:\n'
printf '    sudo onepanel install\n\n'
printf '  Existing installations can use:\n'
printf '    sudo onepanel upgrade\n'
printf '    sudo onepanel status\n\n'
