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

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
DIST_DIR="$SCRIPT_DIR"
TARGET="x86_64-pc-windows-msvc"

# 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} MSI (${TARGET})"

# Prerequisites check
if ! command -v cargo-xwin &>/dev/null; then
    echo "Error: cargo-xwin not found. Install with: cargo install cargo-xwin"
    exit 1
fi

if ! command -v wixl &>/dev/null; then
    echo "Error: wixl not found. Install with: brew install msitools"
    exit 1
fi

if ! rustup target list --installed | grep -q "$TARGET"; then
    echo "Error: Rust target $TARGET not installed. Add with: rustup target add $TARGET"
    exit 1
fi

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

EXE_SRC="$PROJECT_DIR/target/$TARGET/release/audiofiles-app.exe"
if [ ! -f "$EXE_SRC" ]; then
    echo "Error: Build artifact not found at $EXE_SRC"
    exit 1
fi

# Step 2: Stage files
echo "==> Staging files..."
STAGING="$DIST_DIR/.msi-staging"
rm -rf "$STAGING"
mkdir -p "$STAGING"
cp "$EXE_SRC" "$STAGING/AudioFiles.exe"
cp "$DIST_DIR/audiofiles.png" "$STAGING/audiofiles.png"

# Step 3: Generate WiX source from the shared template
# (canonical builder is dist/build-msi-native.ps1 on windows-x86; this script
# is a macOS/Linux cross-compile fallback)
WXS_TEMPLATE="$DIST_DIR/audiofiles.wxs.in"
if [ ! -f "$WXS_TEMPLATE" ]; then
    echo "Error: WiX template missing: $WXS_TEMPLATE"
    exit 1
fi
WXS="$STAGING/audiofiles.wxs"
sed "s/@VERSION@/${VERSION}.0/g" "$WXS_TEMPLATE" > "$WXS"

# Step 4: Build MSI
echo "==> Building MSI..."
MSI_NAME="AudioFiles_${VERSION}_x86_64.msi"
MSI_PATH="$DIST_DIR/$MSI_NAME"
rm -f "$MSI_PATH"

wixl -v -o "$MSI_PATH" "$WXS" -D SourceDir="$STAGING"

# Cleanup
rm -rf "$STAGING"

# Also copy standalone exe
EXE_DEST="$DIST_DIR/AudioFiles_${VERSION}_x86_64.exe"
cp "$EXE_SRC" "$EXE_DEST"

echo ""
echo "Done:"
echo "  MSI: $MSI_PATH ($(du -h "$MSI_PATH" | cut -f1))"
echo "  EXE: $EXE_DEST ($(du -h "$EXE_DEST" | cut -f1))"
