#!/bin/sh
# MHMT Linux rol kurulumu (docs/02-mimari.md, karar #31, #32).
# Rol paketleri yalnız Depends taşır. i386 mimarisi paket kurulurken açılamaz ve
# Depends ":i386" niteliği taşıyamaz; bu yüzden rol kurulumu bu araçla yapılır.
set -eu

usage() {
    cat <<EOF
Kullanım: mhmt-rol liste
          sudo mhmt-rol kur [-y] <rol>...

Roller:
  gelistirme  mhmt-meta-dev     derleme araçları, Python, Node.js, C/C++, Podman
  oyun        mhmt-meta-gaming  Steam, Lutris, Wine, gamemode, MangoHud
EOF
}

package_of() {
    case "$1" in
        gelistirme) echo mhmt-meta-dev ;;
        oyun) echo mhmt-meta-gaming ;;
        *) return 1 ;;
    esac
}

installed() {
    dpkg-query -W -f '${Status}' "$1" 2>/dev/null | grep -q "install ok installed"
}

list_roles() {
    for role in gelistirme oyun; do
        pkg=$(package_of "$role")
        state="kurulu değil"
        installed "$pkg" && state=kurulu
        printf '%-12s %-18s %s\n' "$role" "$pkg" "$state"
    done
}

install_roles() {
    yes=""
    if [ "${1:-}" = "-y" ]; then
        yes="-y"
        shift
    fi
    [ $# -gt 0 ] || { usage >&2; exit 2; }
    [ "$(id -u)" -eq 0 ] || { echo "mhmt-rol: root yetkisi gerekir: sudo mhmt-rol kur $*" >&2; exit 1; }

    packages=""
    i386=no
    for role in "$@"; do
        pkg=$(package_of "$role") || { echo "mhmt-rol: bilinmeyen rol: $role" >&2; usage >&2; exit 2; }
        packages="$packages $pkg"
        if [ "$role" = oyun ]; then
            i386=yes
            packages="$packages wine32:i386"
            # Steam istemcisi 32 bit; NVIDIA kapalı sürücüde Mesa'nın i386 GL/Vulkan'ı kullanılamaz.
            installed nvidia-driver-libs && packages="$packages nvidia-driver-libs:i386"
        fi
    done

    added=no
    if [ $i386 = yes ] && ! dpkg --print-foreign-architectures | grep -qx i386; then
        dpkg --add-architecture i386
        added=yes
    fi
    # Eksik indeksle kurulum yarıda kalmasın: bir kaynağa ulaşılamazsa hiçbir şey kurulmaz.
    if ! apt-get update --error-on=any; then
        [ $added = yes ] && dpkg --remove-architecture i386
        echo "mhmt-rol: paket kaynaklarına ulaşılamadı; internet bağlantısını denetleyin." >&2
        exit 1
    fi
    # shellcheck disable=SC2086
    apt-get install $yes $packages
}

case "${1:-}" in
    liste) list_roles ;;
    kur) shift; install_roles "$@" ;;
    -h|--help|yardim) usage ;;
    *) usage >&2; exit 2 ;;
esac
