#!/usr/bin/env sh
set -e

# Version validation - check if contract VERSION is in COMPATIBLE_CONTRACT_VERSIONS
# Only run if both version files exist (system may not be implemented yet)
if [ -f "onchain/src/Kraiken.sol" ] && [ -f "kraiken-lib/src/version.ts" ]; then
  STAGED_FILES=$(git diff --staged --name-only)
  if echo "$STAGED_FILES" | grep -qE "(onchain/src/Kraiken.sol|kraiken-lib/src/version.ts)"; then
    echo "Validating version sync between contract and kraiken-lib..."

    # Extract contract VERSION constant
    CONTRACT_VERSION=$(grep -oP 'VERSION\s*=\s*\K\d+' onchain/src/Kraiken.sol | head -1)

    # Only validate if VERSION constant exists in contract
    if [ -n "$CONTRACT_VERSION" ]; then
      # Extract library version and compatible versions
      LIB_VERSION=$(grep -oP 'KRAIKEN_LIB_VERSION\s*=\s*\K\d+' kraiken-lib/src/version.ts)
      COMPATIBLE=$(grep -oP 'COMPATIBLE_CONTRACT_VERSIONS\s*=\s*\[\K[^\]]+' kraiken-lib/src/version.ts)

      echo "  Contract VERSION: $CONTRACT_VERSION"
      echo "  Library VERSION: $LIB_VERSION"
      echo "  Compatible versions: $COMPATIBLE"

      # Check if contract version is in compatible list (strip spaces for reliable matching)
      COMPATIBLE_CLEAN=$(echo "$COMPATIBLE" | tr -d ' ')
      if echo ",$COMPATIBLE_CLEAN," | grep -q ",$CONTRACT_VERSION,"; then
        echo "  ✓ Version sync validated"
      else
        echo "  ❌ Version validation failed!"
        echo ""
        echo "Contract VERSION ($CONTRACT_VERSION) not in COMPATIBLE_CONTRACT_VERSIONS"
        echo ""
        echo "To fix:"
        echo "1. Update COMPATIBLE_CONTRACT_VERSIONS in kraiken-lib/src/version.ts to include $CONTRACT_VERSION:"
        echo "   export const COMPATIBLE_CONTRACT_VERSIONS = [$COMPATIBLE, $CONTRACT_VERSION];"
        echo ""
        echo "2. Or update KRAIKEN_LIB_VERSION if this is a breaking change:"
        echo "   export const KRAIKEN_LIB_VERSION = $CONTRACT_VERSION;"
        echo "   export const COMPATIBLE_CONTRACT_VERSIONS = [$CONTRACT_VERSION];"
        echo ""
        echo "See VERSION_VALIDATION.md for details."
        exit 1
      fi
    fi
  fi
fi

if [ -d "onchain" ]; then
  (cd onchain && npx lint-staged)
fi

if [ -d "kraiken-lib" ]; then
  (cd kraiken-lib && npx lint-staged)
fi

if [ -d "services/txnBot" ]; then
  (cd services/txnBot && npx lint-staged)
fi

if [ -d "web-app" ]; then
  (cd web-app && npx lint-staged)
fi

if [ -d "services/ponder" ]; then
  (cd services/ponder && npx lint-staged)
fi
