#!/bin/bash
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0
set -e

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
INSTALL_SH="$SCRIPT_DIR/../../install.sh"

echo "=== test_tauri_install_exit_order ==="

tauri_marker_line=$(grep -n "Tauri mode: done, skip shortcuts and auto-launch" "$INSTALL_SH" | head -n1 | cut -d: -f1)
tauri_exit_line=$(awk -v start="$tauri_marker_line" 'NR > start && /exit 0/ { print NR; exit }' "$INSTALL_SH")
tauri_done_line=$(awk -v start="$tauri_marker_line" 'NR > start && /tauri_log "DONE" ""/ { print NR; exit }' "$INSTALL_SH")
first_setup_check_line=$(grep -n 'if \[ "$_SETUP_EXIT" -ne 0 \]; then' "$INSTALL_SH" | head -n1 | cut -d: -f1)
setup_exit_line=$(awk -v start="$first_setup_check_line" 'NR > start && /exit "\$_SETUP_EXIT"/ { print NR; exit }' "$INSTALL_SH")
shortcut_line=$(grep -n 'create_studio_shortcuts "$VENV_ABS_BIN/unsloth" "$OS"' "$INSTALL_SH" | head -n1 | cut -d: -f1)
shortcut_guard_line=$(
    awk -v stop="$first_setup_check_line" '
        NR >= stop { exit }
        /\[ "\$TAURI_MODE" != true \]/ {
            print NR
            exit
        }
    ' "$INSTALL_SH"
)
shortcut_guard_end_line=$(
    awk -v start="$shortcut_guard_line" -v shortcut="$shortcut_line" '
        NR <= start { next }
        NR <= shortcut { next }
        /^[[:space:]]*fi[[:space:]]*$/ {
            print NR
            exit
        }
    ' "$INSTALL_SH"
)
early_tauri_exit_line=$(
    awk -v setup="$first_setup_check_line" '
        NR >= setup { exit }
        # Only a real "if ...; then" opener starts a Tauri block. Ignore && one-liners
        # like the reroute `[ "$TAURI_MODE" = true ] && _rr_args=... --tauri`, whose
        # reroute `exit 0` is not an end-of-install success exit.
        /^[[:space:]]*if \[ "\$TAURI_MODE" = true \][[:space:]]*;[[:space:]]*then[[:space:]]*$/ {
            in_tauri = 1
            depth = 1
            next
        }
        in_tauri && /^[[:space:]]*if[[:space:]].*;[[:space:]]*then[[:space:]]*$/ {
            depth++
        }
        in_tauri && /exit[[:space:]]+0/ {
            print NR
            exit
        }
        in_tauri && /^[[:space:]]*fi[[:space:]]*$/ {
            depth--
            if (depth == 0) {
                in_tauri = 0
            }
        }
    ' "$INSTALL_SH"
)

if [ -z "$tauri_marker_line" ] || [ -z "$tauri_exit_line" ] || [ -z "$tauri_done_line" ] || [ -z "$first_setup_check_line" ] || [ -z "$setup_exit_line" ] || [ -z "$shortcut_line" ] || [ -z "$shortcut_guard_line" ] || [ -z "$shortcut_guard_end_line" ]; then
    echo "  FAIL: required install.sh markers not found"
    exit 1
fi

if [ -n "$early_tauri_exit_line" ]; then
    echo "  FAIL: Tauri success exit before setup failure check at line $early_tauri_exit_line"
    exit 1
fi

if [ "$shortcut_guard_line" -ge "$shortcut_line" ] || [ "$shortcut_line" -ge "$shortcut_guard_end_line" ]; then
    echo "  FAIL: shortcuts are not guarded by non-Tauri check"
    exit 1
fi

if [ "$shortcut_line" -ge "$first_setup_check_line" ]; then
    echo "  FAIL: shortcut line $shortcut_line is after setup failure check line $first_setup_check_line"
    exit 1
fi

if [ "$first_setup_check_line" -ge "$setup_exit_line" ]; then
    echo "  FAIL: setup failure check line $first_setup_check_line is after setup exit line $setup_exit_line"
    exit 1
fi

if [ "$setup_exit_line" -ge "$tauri_done_line" ]; then
    echo "  FAIL: setup failure exit line $setup_exit_line is after Tauri DONE line $tauri_done_line"
    exit 1
fi

if [ "$setup_exit_line" -ge "$tauri_exit_line" ]; then
    echo "  FAIL: setup failure check line $first_setup_check_line is after Tauri exit line $tauri_exit_line"
    exit 1
fi

echo "  PASS: non-Tauri shortcuts run before setup failure exit"
echo "  PASS: setup failure exits before Tauri success"
echo "  PASS: Tauri skips shortcuts"
