#!/bin/bash
# Pre-commit hook to ensure bin/analyze-go and bin/status-go are universal binaries

set -e

# ANSI color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Check if binaries are being committed
binaries=()
if git diff --cached --name-only | grep -q "^bin/analyze-go$"; then
    binaries+=("bin/analyze-go")
fi
if git diff --cached --name-only | grep -q "^bin/status-go$"; then
    binaries+=("bin/status-go")
fi

# If no binaries are being committed, exit early
if [[ ${#binaries[@]} -eq 0 ]]; then
    exit 0
fi

echo -e "${YELLOW}Checking compiled binaries...${NC}"

# Verify each binary is a universal binary
all_valid=true
for binary in "${binaries[@]}"; do
    if [[ ! -f "$binary" ]]; then
        echo -e "${RED}✗ $binary not found${NC}"
        all_valid=false
        continue
    fi

    # Check if it's a universal binary
    if file "$binary" | grep -q "Mach-O universal binary"; then
        # Verify it contains both x86_64 and arm64
        if lipo -info "$binary" 2>/dev/null | grep -q "x86_64 arm64"; then
            echo -e "${GREEN}✓ $binary is a universal binary (x86_64 + arm64)${NC}"
        elif lipo -info "$binary" 2>/dev/null | grep -q "arm64 x86_64"; then
            echo -e "${GREEN}✓ $binary is a universal binary (x86_64 + arm64)${NC}"
        else
            echo -e "${RED}✗ $binary is missing required architectures${NC}"
            lipo -info "$binary"
            all_valid=false
        fi
    else
        echo -e "${RED}✗ $binary is not a universal binary${NC}"
        file "$binary"
        all_valid=false
    fi
done

if [[ "$all_valid" == "false" ]]; then
    echo ""
    echo -e "${RED}Commit rejected: binaries must be universal (x86_64 + arm64)${NC}"
    echo ""
    echo "To create universal binaries, run:"
    echo "  ./scripts/build-analyze.sh"
    echo "  ./scripts/build-status.sh"
    echo ""
    exit 1
fi

echo -e "${GREEN}All binaries verified!${NC}"
exit 0
