#!/bin/sh
# postinstall мета-пакета tuna.am: перенастройка репозиториев хоста со старого
# хостинга (repo.tuna.am apt, releases.tuna.am yum, altlinux.space) на
# собственный Forgejo-реестр code.tuna.am. Все действия best-effort и
# идемпотентны — ошибка перенастройки не должна валить установку.
#
# Сами пакеты (tuna-cli, tunad) ставит пакетный менеджер по зависимостям в
# рамках той же транзакции; здесь только переключаем источник на будущее —
# вызывать apt/dnf из maintainer-скрипта нельзя (блокировка БД пакетов).
set -e

FORGEJO_API="https://code.tuna.am/api/packages/tuna"

log() { echo "tuna.am: $*"; }

fetch() {
	if command -v curl >/dev/null 2>&1; then
		curl -fsSL "$1"
	elif command -v wget >/dev/null 2>&1; then
		wget -qO- "$1"
	else
		return 1
	fi
}

setup_deb() {
	command -v apt-get >/dev/null 2>&1 || return 0
	keyring=/usr/share/keyrings/tuna-forgejo.gpg
	tmpkey=$(mktemp) || return 0
	if fetch "${FORGEJO_API}/debian/repository.key" >"${tmpkey}" 2>/dev/null && [ -s "${tmpkey}" ]; then
		gpg --dearmor --batch --yes -o "${keyring}" "${tmpkey}" 2>/dev/null || cp "${tmpkey}" "${keyring}"
	fi
	rm -f "${tmpkey}"
	printf 'deb [signed-by=%s] %s/debian stable main\n' \
		"${keyring}" "${FORGEJO_API}" >/etc/apt/sources.list.d/tuna-forgejo.list
	# Отключаем старый gemfury-репозиторий (repo.tuna.am).
	if [ -f /etc/apt/sources.list.d/tuna.list ]; then
		mv -f /etc/apt/sources.list.d/tuna.list \
			/etc/apt/sources.list.d/tuna.list.disabled-by-tuna-migration 2>/dev/null || true
	fi
	log "Forgejo APT repo configured"
}

setup_rpm() {
	[ -d /etc/yum.repos.d ] || return 0
	if fetch "${FORGEJO_API}/rpm/stable.repo" >/etc/yum.repos.d/tuna-forgejo.repo 2>/dev/null; then
		for f in /etc/yum.repos.d/tuna-rpm.repo /etc/yum.repos.d/tuna.repo; do
			[ -f "${f}" ] && mv -f "${f}" "${f}.disabled-by-tuna-migration" 2>/dev/null || true
		done
		log "Forgejo RPM repo configured"
	fi
}

setup_alt() {
	command -v apt-repo >/dev/null 2>&1 || return 0
	apt-repo rm "rpm https://altlinux.space/api/packages/tuna/alt/current.repo $(arch) classic" 2>/dev/null || true
	apt-repo add "rpm ${FORGEJO_API}/alt/stable.repo $(arch) classic" 2>/dev/null || true
	log "Forgejo ALT repo configured"
}

if [ -f /etc/altlinux-release ]; then
	setup_alt
else
	# shellcheck source=/dev/null
	[ -r /etc/os-release ] && . /etc/os-release
	case " ${ID_LIKE:-} ${ID:-} " in
		*debian*|*ubuntu*) setup_deb ;;
		*rhel*|*fedora*|*centos*|*suse*) setup_rpm ;;
		*altlinux*) setup_alt ;;
		*)
			command -v apt-get >/dev/null 2>&1 && setup_deb
			[ -d /etc/yum.repos.d ] && setup_rpm
			;;
	esac
fi

exit 0
