#!/bin/bash

# Конфигурация
REMOTE_USER="mib"                     # Пользователь на исходной системе
REMOTE_HOST="192.168.1.234"              # Адрес исходной системы
FFMPEG_PATH="/Users/mib/bin/ffmpeg"    # Путь к ffmpeg на целевой системе
LIBS_DIR="/Users/mib/bin/libs-tmp"  # Каталог для библиотек на целевой системе
BREW_PREFIX="/usr/local/Cellar/" # Путь к Homebrew ffmpeg на исходной системе
MAX_ATTEMPTS=100                        # Максимальное количество попыток (чтобы избежать бесконечного цикла)

# Создаем каталог для библиотек, если его нет
mkdir -p "$LIBS_DIR"

# Добавляем LIBS_DIR в DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH="$LIBS_DIR:$DYLD_LIBRARY_PATH"

attempt=1
while [[ $attempt -le $MAX_ATTEMPTS ]]; do
    echo "Попытка $attempt из $MAX_ATTEMPTS..."

    # Запускаем ffmpeg и перехватываем ошибку
    ERROR_OUTPUT=$("$FFMPEG_PATH" -version 2>&1 >/dev/null)
    if [[ $? -eq 0 ]]; then
        echo "Успех! ffmpeg запускается без ошибок."
        exit 0
    fi

    # Извлекаем имя отсутствующей библиотеки
    MISSING_LIB=$(echo "$ERROR_OUTPUT" | grep -oE "Library not loaded: ([^ ]+)" | cut -d' ' -f4)
    if [[ -z "$MISSING_LIB" ]]; then
        echo "Ошибка: Не удалось определить отсутствующую библиотеку."
        echo "Вывод ошибки:"
        echo "$ERROR_OUTPUT"
        exit 1
    fi

    LIB_NAME=$(basename "$MISSING_LIB")
    echo "Найдена отсутствующая библиотека: $LIB_NAME"

    # Ищем библиотеку на исходной системе
    REMOTE_LIB_PATH=$(ssh "$REMOTE_USER@$REMOTE_HOST" find "$BREW_PREFIX" -name "$LIB_NAME" | head -n 1)
    if [[ -z "$REMOTE_LIB_PATH" ]]; then
        echo "Ошибка: Библиотека $LIB_NAME не найдена на $REMOTE_HOST в $BREW_PREFIX"
        exit 1
    fi

    echo "Найдена библиотека на исходной системе: $REMOTE_LIB_PATH"

    # Проверяем, является ли файл симлинком
    IS_SYMLINK=$(ssh "$REMOTE_USER@$REMOTE_HOST" "if [[ -L \"$REMOTE_LIB_PATH\" ]]; then echo 1; else echo 0; fi")

    if [[ "$IS_SYMLINK" == "1" ]]; then
        # Если это симлинк, получаем реальный файл
        REAL_LIB=$(ssh "$REMOTE_USER@$REMOTE_HOST" "readlink \"$REMOTE_LIB_PATH\"")
        REAL_LIB_PATH=$(dirname "$REMOTE_LIB_PATH")/"$REAL_LIB"
        echo "Это симлинк на $REAL_LIB, копируем и переименовываем..."

        # Копируем реальный файл и переименовываем его
        scp "$REMOTE_USER@$REMOTE_HOST:$REAL_LIB_PATH" "$LIBS_DIR/$LIB_NAME"
    else
        # Если это обычный файл, просто копируем
        scp "$REMOTE_USER@$REMOTE_HOST:$REMOTE_LIB_PATH" "$LIBS_DIR/$LIB_NAME"
    fi

    echo "Библиотека скопирована как $LIBS_DIR/$LIB_NAME"
    ((attempt++))
done

echo "Достигнуто максимальное количество попыток ($MAX_ATTEMPTS), но ffmpeg всё ещё не работает."
echo "Проверьте, все ли зависимости скопированы в $LIBS_DIR."
exit 1

