#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
DIST_DIR="$SCRIPT_DIR"
TOOLS_DIR="$DIST_DIR/tools"
ARCH=$(uname -m)

# Read version from Cargo.toml
VERSION=$(grep '^version' "$PROJECT_DIR/crates/audiofiles-app/Cargo.toml" | head -1 | sed 's/.*"\(.*\)".*/\1/')
echo "Building AudioFiles v${VERSION} AppImage (${ARCH})"

# Step 1: Build release binary
echo "==> Building release binary..."
cd "$PROJECT_DIR"
cargo build --release -p audiofiles-app

# Step 2: Create AppDir
echo "==> Assembling AppDir..."
APPDIR="$DIST_DIR/AppDir"
rm -rf "$APPDIR"
mkdir -p "$APPDIR/usr/bin"

cp "$PROJECT_DIR/target/release/audiofiles-app" "$APPDIR/usr/bin/audiofiles-app"
cp "$DIST_DIR/audiofiles.desktop" "$APPDIR/audiofiles.desktop"
cp "$DIST_DIR/audiofiles.png" "$APPDIR/audiofiles.png"

# AppRun wrapper
cat > "$APPDIR/AppRun" << 'APPRUN'
#!/usr/bin/env bash
SELF="$(readlink -f "$0")"
HERE="${SELF%/*}"
exec "${HERE}/usr/bin/audiofiles-app" "$@"
APPRUN
chmod +x "$APPDIR/AppRun"

# Step 3: Get appimagetool
mkdir -p "$TOOLS_DIR"
APPIMAGETOOL="$TOOLS_DIR/appimagetool-${ARCH}.AppImage"
if [ ! -x "$APPIMAGETOOL" ]; then
    echo "==> Downloading appimagetool..."
    curl -fSL "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${ARCH}.AppImage" \
        -o "$APPIMAGETOOL"
    chmod +x "$APPIMAGETOOL"
fi

# Step 4: Build AppImage
echo "==> Creating AppImage..."
APPIMAGE_NAME="AudioFiles-${VERSION}-${ARCH}.AppImage"
APPIMAGE_PATH="$DIST_DIR/$APPIMAGE_NAME"
rm -f "$APPIMAGE_PATH"

ARCH="$ARCH" "$APPIMAGETOOL" "$APPDIR" "$APPIMAGE_PATH"

# Cleanup
rm -rf "$APPDIR"

echo ""
echo "Done: $APPIMAGE_PATH"
