#!/bin/bash
# Mock für find - steuert Datei-Erkennung
# - Bei Versions-Erkennung: simulierte Pfade aus State
# - Bei Cleanup mit -delete: echte Dateien löschen

MOCK_DIR="$(cd "$(dirname "$0")/../fixtures" && pwd)"
MOCK_STATE_FILE="${MOCK_DIR}/find_state"
# Echten find über absoluten Pfad aufrufen (vermeidet Rekursion über PATH)
REAL_FIND=""
for candidate in /usr/bin/find /bin/find /usr/local/bin/find; do
    if [[ -x "$candidate" ]]; then
        resolved="$(readlink -f "$candidate" 2>/dev/null || echo "$candidate")"
        [[ "$resolved" != *test/mocks* ]] && REAL_FIND="$candidate" && break
    fi
done
[[ -z "$REAL_FIND" ]] && REAL_FIND="/usr/bin/find"

if [[ -f "${MOCK_STATE_FILE}" ]]; then
    # shellcheck source=/dev/null
    source "${MOCK_STATE_FILE}"
fi

# Defaults
FIND_INSTALLED_VERSION="${FIND_INSTALLED_VERSION:-}"
FIND_FILES=()

# State parsen: FIND_FILES="file1|file2|file3"
if [[ -n "${FIND_FILES_RAW}" ]]; then
    IFS='|' read -ra FIND_FILES <<< "${FIND_FILES_RAW}"
fi

# Bei -delete: echte find-Operation auf das Zielverzeichnis ausführen
# (löscht echte Dateien im Test-HOME)
if [[ "$*" == *"-delete"* ]]; then
    "$REAL_FIND" "$@"
    exit $?
fi

# Prüfen ob wir nach AppImages suchen (Versions-Erkennung)
if [[ "$*" == *"Logseq-linux-x64-*.AppImage"* ]] || [[ "$*" == *"Logseq-\*AppImage"* ]]; then
    if [[ -n "${FIND_INSTALLED_VERSION}" ]]; then
        # Simuliere installierte Version
        echo "${MOCK_DIR}/Logseq-linux-x64-${FIND_INSTALLED_VERSION}.AppImage"
    elif [[ ${#FIND_FILES[@]} -gt 0 ]]; then
        for f in "${FIND_FILES[@]}"; do
            echo "${MOCK_DIR}/${f}"
        done
    fi
    exit 0
fi

# Fallback: echtes find aufrufen (für update-desktop-database etc.)
"$REAL_FIND" "$@"