name: Validate and Process Meta.json

on:
  push:
    branches: [main, master, develop]
    paths: ["meta.json"]
  pull_request:
    branches: [main, master]
    paths: ["meta.json"]
  workflow_dispatch:

jobs:
  validate-meta:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      - name: Validate meta.json structure
        run: |
          echo "🔍 Validating meta.json structure..."
          node -e "
            const fs = require('fs');
            const data = JSON.parse(fs.readFileSync('meta.json', 'utf8'));
            if (!Array.isArray(data)) throw new Error('meta.json must be an array');
            console.log('✅ meta.json structure is valid');
            console.log('📊 Found', data.length, 'entries');
          "

      - name: Check for duplicates and sort order
        run: |
          echo "🔍 Checking for duplicates and sort order..."
          node build-scripts/process-meta.js --verbose --output /tmp/meta-test.json

      - name: Compare with original
        run: |
          echo "🔍 Comparing processed file with original..."
          if ! diff -q meta.json /tmp/meta-test.json > /dev/null; then
            echo "⚠️ meta.json needs processing (duplicates found or not sorted)"
            echo "Original entries:"
            node -e "console.log(JSON.parse(require('fs').readFileSync('meta.json', 'utf8')).length)"
            echo "Processed entries:"
            node -e "console.log(JSON.parse(require('fs').readFileSync('/tmp/meta-test.json', 'utf8')).length)"
            echo ""
            echo "To fix this, run: npm run process-meta"
            exit 1
          else
            echo "✅ meta.json is properly deduplicated and sorted"
          fi

      - name: Validate required fields
        run: |
          echo "🔍 Validating required fields..."
          node -e "
            const fs = require('fs');
            const data = JSON.parse(fs.readFileSync('meta.json', 'utf8'));
            const required = ['id', 'name', 'version', 'description', 'links', 'logo', 'tags'];
            let issues = 0;
            
            data.forEach((item, index) => {
              const missing = required.filter(field => !item[field]);
              if (missing.length > 0) {
                console.log('❌ Entry', index, '(' + item.id + '):', 'Missing fields:', missing.join(', '));
                issues++;
              }
            });
            
            if (issues > 0) {
              console.log('🚨 Found', issues, 'entries with missing required fields');
              process.exit(1);
            } else {
              console.log('✅ All entries have required fields');
            }
          "
