#!/bin/bash
# EchoMusic Linux 启动 wrapper
# 解决 Electron 内置裁剪版 libffmpeg 与系统 libmpv 依赖的完整版 libav* 符号冲突问题。
# 通过 LD_PRELOAD 在 Electron 启动前预加载系统完整版 libav*，
# 确保 libmpv 的依赖绑定到完整版而非 Electron 的裁剪版。

SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

# 查找系统 libmpv 所在目录
find_libmpv_dir() {
    local search_paths=(
        "/usr/lib/x86_64-linux-gnu"
        "/usr/lib/aarch64-linux-gnu"
        "/usr/lib"
        "/usr/local/lib"
    )
    for dir in "${search_paths[@]}"; do
        if [ -f "$dir/libmpv.so" ] || [ -f "$dir/libmpv.so.2" ] || [ -f "$dir/libmpv.so.1" ]; then
            echo "$dir"
            return 0
        fi
    done
    return 1
}

# 在指定目录中查找匹配 pattern 的第一个文件
find_lib() {
    local dir="$1"
    shift
    for pattern in "$@"; do
        local found=$(ls "$dir"/$pattern 2>/dev/null | head -1)
        if [ -n "$found" ]; then
            echo "$found"
            return 0
        fi
    done
    return 1
}

# 如果找到系统 libmpv，预加载其依赖的 libav* 库
LIBMPV_DIR=$(find_libmpv_dir)
if [ -n "$LIBMPV_DIR" ]; then
    PRELOAD_LIBS=""
    for lib in libavutil.so* libswresample.so* libavcodec.so* libavformat.so* libswscale.so* libavfilter.so*; do
        found=$(ls "$LIBMPV_DIR"/$lib 2>/dev/null | grep -v "\.so$" | head -1)
        if [ -n "$found" ]; then
            PRELOAD_LIBS="${PRELOAD_LIBS:+$PRELOAD_LIBS:}$found"
        fi
    done
    if [ -n "$PRELOAD_LIBS" ]; then
        export LD_PRELOAD="${PRELOAD_LIBS}${LD_PRELOAD:+:$LD_PRELOAD}"
    fi
    export LD_LIBRARY_PATH="${LIBMPV_DIR}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
fi

# 启动真正的 Electron 主程序
exec "$SCRIPT_DIR/echo-music-bin" "$@"
