#!/bin/sh
set -eu

PACKAGE_NAME="musicnote-haven-midi-manager"
APP_DISPLAY_NAME="MusicNote Haven MIDI Manager"

if [ "${MNH_UNINSTALL_HELPER_REEXEC:-0}" != "1" ]; then
    TMP_SCRIPT="$(mktemp /tmp/musicnote-haven-midi-manager-uninstall.XXXXXX)"
    cp "$0" "$TMP_SCRIPT"
    chmod 700 "$TMP_SCRIPT"
    export MNH_UNINSTALL_HELPER_REEXEC=1
    exec "$TMP_SCRIPT" "$@"
fi

say() {
    printf '%s\n' "$*"
}

prompt() {
    printf '%s' "$1"
    IFS= read -r REPLY_TEXT
}

run_root() {
    if [ "$(id -u)" -eq 0 ]; then
        "$@"
    else
        sudo "$@"
    fi
}

target_user() {
    if [ "$(id -u)" -eq 0 ] && [ -n "${SUDO_USER:-}" ] && [ "${SUDO_USER:-}" != "root" ]; then
        printf '%s\n' "$SUDO_USER"
        return
    fi

    if [ -n "${USER:-}" ]; then
        printf '%s\n' "$USER"
        return
    fi

    id -un
}

home_for_user() {
    USER_NAME="$1"
    getent passwd "$USER_NAME" | awk -F: '{print $6}'
}

safe_remove_app_data_dir() {
    TARGET_PATH="$1"
    TARGET_HOME="$2"

    if [ -z "$TARGET_PATH" ] || [ "$TARGET_PATH" = "/" ]; then
        say "Skipping unsafe empty/root path."
        return
    fi

    case "$TARGET_PATH" in
        "$TARGET_HOME"/*)
            ;;
        *)
            say "Skipping path outside target home: $TARGET_PATH"
            return
            ;;
    esac

    if [ -e "$TARGET_PATH" ]; then
        say "Removing app data: $TARGET_PATH"
        run_root rm -rf -- "$TARGET_PATH"
    else
        say "Not present: $TARGET_PATH"
    fi
}

TARGET_USER="$(target_user)"
TARGET_HOME="$(home_for_user "$TARGET_USER")"

if [ -z "$TARGET_HOME" ] || [ ! -d "$TARGET_HOME" ]; then
    say "Could not determine a valid home directory for user: $TARGET_USER"
    exit 1
fi

say "MusicNote Haven MIDI Manager uninstall / clean-start helper"
say "==========================================================="
say ""
say "Target Linux user for optional app-data removal: $TARGET_USER"
say "Home directory: $TARGET_HOME"
say ""

if dpkg -s "$PACKAGE_NAME" >/dev/null 2>&1; then
    say "The application package is currently installed."
    say ""
    say "This will remove the application package, launcher and desktop menu entry."
    prompt "Type REMOVE APP to remove the application package, or press Enter to cancel: "
    if [ "$REPLY_TEXT" = "REMOVE APP" ]; then
        run_root apt remove --purge -y "$PACKAGE_NAME"
        say "Application package removed."
    else
        say "Application removal cancelled."
        exit 0
    fi
else
    say "The application package is not currently installed."
fi

say ""
say "Optional clean start"
say "--------------------"
say "This can remove MusicNote Haven MIDI Manager app settings, local database,"
say "license state and local app cache for the target Linux user only."
say ""
say "It will NOT remove your MIDI folders or music collection."
say "It will NOT remove folders such as MIDI-unsorted, MIDI-sorted,"
say "MIDI-exports or MIDI-archive."
say ""

prompt "First warning: type DELETE USER DATA to continue to the final warning, or press Enter to keep user data: "
if [ "$REPLY_TEXT" != "DELETE USER DATA" ]; then
    say "User data was kept."
    exit 0
fi

say ""
say "FINAL WARNING: this cannot be undone."
say "The following app-specific locations may be removed if present:"
say "  $TARGET_HOME/.local/share/MusicNote Haven/MIDI Manager"
say "  $TARGET_HOME/.local/share/MusicNote-Haven/MIDI-Manager"
say "  $TARGET_HOME/.config/MusicNote Haven/MIDI Manager"
say "  $TARGET_HOME/.config/MusicNote-Haven/MIDI-Manager"
say "  $TARGET_HOME/.cache/MusicNote Haven/MIDI Manager"
say "  $TARGET_HOME/.cache/MusicNote-Haven/MIDI-Manager"
say "  $TARGET_HOME/.local/state/MusicNote Haven/MIDI Manager"
say "  $TARGET_HOME/.local/state/MusicNote-Haven/MIDI-Manager"
say ""
prompt "Second warning: type the Linux username '$TARGET_USER' to delete app data: "

if [ "$REPLY_TEXT" != "$TARGET_USER" ]; then
    say "User data removal cancelled."
    exit 0
fi

safe_remove_app_data_dir "$TARGET_HOME/.local/share/MusicNote Haven/MIDI Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.local/share/MusicNote-Haven/MIDI-Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.config/MusicNote Haven/MIDI Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.config/MusicNote-Haven/MIDI-Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.cache/MusicNote Haven/MIDI Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.cache/MusicNote-Haven/MIDI-Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.local/state/MusicNote Haven/MIDI Manager" "$TARGET_HOME"
safe_remove_app_data_dir "$TARGET_HOME/.local/state/MusicNote-Haven/MIDI-Manager" "$TARGET_HOME"

say ""
say "Clean-start app data removal complete."
say "Your MIDI folders/music files were not removed."
