#!/bin/bash
# Verify repository path conventions

set -euo pipefail

FAILED=0
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)"

echo "=== Path Convention Verification ==="

# Check 1: No binaries in root
echo "Checking for binaries in root..."
for binary in api-server worker tui data_manager; do
    if [ -f "./$binary" ]; then
        echo "✗ FAIL: Binary $binary found in root (should be in bin/)"
        FAILED=1
    fi
done
if [ $FAILED -eq 0 ]; then
    echo "No binaries in root"
fi

# Check 2: No .DS_Store files
echo "Checking for .DS_Store files..."
DSSTORE_COUNT=$(find . -name ".DS_Store" -type f 2>/dev/null | wc -l)
if [ "$DSSTORE_COUNT" -gt 0 ]; then
    echo "✗ FAIL: $DSSTORE_COUNT .DS_Store file(s) found"
    find . -name ".DS_Store" -type f | head -5
    FAILED=1
else
    echo "No .DS_Store files"
fi

# Check 3: No coverage.out in root
echo "Checking for coverage.out in root..."
if [ -f "./coverage.out" ]; then
    echo "✗ FAIL: coverage.out found in root (should be in coverage/)"
    FAILED=1
else
    echo "No coverage.out in root"
fi

# Check 4: Bin directory should exist or be empty
echo "Checking bin/ directory..."
if [ -d "./bin" ]; then
    BIN_COUNT=$(ls -1 ./bin 2>/dev/null | wc -l)
    echo "bin/ exists ($BIN_COUNT files)"
else
    echo "ℹ bin/ does not exist (will be created by make build)"
fi

# Check 5: Data directories should be gitignored
echo "Checking data/ directory..."
if [ -d "./data" ]; then
    if git check-ignore -q ./data 2>/dev/null; then
        echo "data/ is gitignored"
    else
        echo "⚠ WARNING: data/ exists but may not be gitignored"
    fi
else
    echo "ℹ data/ does not exist"
fi

# Summary
echo ""
if [ $FAILED -eq 0 ]; then
    echo "All path conventions verified"
    exit 0
else
    echo "✗ Path convention verification failed"
    exit 1
fi
