#!/bin/bash
# Maus Disk Manager 2 - online instalátor
# Doporučené umístění na webu:
#   https://www.mauscomputer.cz/install/maus_disk_manager
#
# Spuštění pro uživatele:
#   curl -L https://www.mauscomputer.cz/install/maus_disk_manager -o maus_install.sh
#   chmod +x maus_install.sh
#   ./maus_install.sh

set -e

APP_NAME="Maus Disk Manager 2"
BASE_URL="https://www.mauscomputer.cz"
UPDATE_DIR_URL="$BASE_URL/updates"
LATEST_JSON_URL="$UPDATE_DIR_URL/maus_disk_manager_latest.json"
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT

need_command() {
    command -v "$1" >/dev/null 2>&1
}

show_info() {
    if need_command zenity; then
        zenity --info --title="$APP_NAME" --width=600 --text="$1" || true
    else
        echo -e "$1"
    fi
}

show_error() {
    if need_command zenity; then
        zenity --error --title="$APP_NAME" --width=600 --text="$1" || true
    else
        echo -e "$1" >&2
    fi
}

download_file() {
    URL="$1"
    OUT="$2"

    if need_command curl; then
        curl -L --fail --progress-bar "$URL" -o "$OUT"
    elif need_command wget; then
        wget -O "$OUT" "$URL"
    else
        show_error "Chybí curl i wget. Nainstaluj jeden z nich:\n\nsudo apt install curl"
        exit 1
    fi
}

ensure_basic_tools() {
    MISSING=()
    for pkg in curl tar gzip coreutils; do
        if ! dpkg -s "$pkg" >/dev/null 2>&1; then
            MISSING+=("$pkg")
        fi
    done

    if [ ${#MISSING[@]} -gt 0 ]; then
        if need_command pkexec; then
            pkexec bash -c "apt update && apt install -y ${MISSING[*]}"
        else
            sudo apt update
            sudo apt install -y "${MISSING[@]}"
        fi
    fi
}

echo "=== $APP_NAME online instalátor ==="
ensure_basic_tools

JSON_FILE="$TMP_DIR/latest.json"
download_file "$LATEST_JSON_URL" "$JSON_FILE"

PACKAGE_URL="$(python3 - "$JSON_FILE" <<'PY'
import json, sys
with open(sys.argv[1], "r", encoding="utf-8") as f:
    data = json.load(f)
print(data["package_url"])
PY
)"

SHA256_EXPECTED="$(python3 - "$JSON_FILE" <<'PY'
import json, sys
with open(sys.argv[1], "r", encoding="utf-8") as f:
    data = json.load(f)
print(data.get("sha256", ""))
PY
)"

VERSION="$(python3 - "$JSON_FILE" <<'PY'
import json, sys
with open(sys.argv[1], "r", encoding="utf-8") as f:
    data = json.load(f)
print(data.get("version", "neznámá"))
PY
)"

show_info "Stahuji Maus Disk Manager verze $VERSION.\n\nZdroj:\n$PACKAGE_URL"

PKG="$TMP_DIR/update.tar.gz"
download_file "$PACKAGE_URL" "$PKG"

if [ -n "$SHA256_EXPECTED" ]; then
    SHA256_REAL="$(sha256sum "$PKG" | awk '{print $1}')"
    if [ "$SHA256_REAL" != "$SHA256_EXPECTED" ]; then
        show_error "Kontrola SHA256 nesouhlasí!\n\nOčekáváno:\n$SHA256_EXPECTED\n\nStaženo:\n$SHA256_REAL\n\nInstalace zastavena."
        exit 1
    fi
fi

tar -xzf "$PKG" -C "$TMP_DIR"

INSTALL_SCRIPT="$(find "$TMP_DIR" -maxdepth 3 -type f -name install.sh | head -n 1)"

if [ -z "$INSTALL_SCRIPT" ]; then
    show_error "V balíku nebyl nalezen install.sh."
    exit 1
fi

chmod +x "$INSTALL_SCRIPT"
"$INSTALL_SCRIPT"

show_info "Instalace hotova.\n\nProgram najdeš na ploše, v menu aplikací nebo příkazem:\n\nmaus-disk-manager"
