name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  validate:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.9', '3.12']

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Validate Python script syntax
        run: |
          for f in assets/scripts/*.py; do
            python -c "import ast; ast.parse(open('$f').read())" && echo "OK: $f" || exit 1
          done

      - name: Validate city token extraction
        run: |
          python assets/scripts/get_city_tokens.py "Kyoto" > /dev/null
          python assets/scripts/get_city_tokens.py "東京" > /dev/null
          python assets/scripts/get_city_tokens.py "Seoul" --texture > /dev/null
          echo "City token extraction: OK"

      - name: Validate all variant extraction
        run: |
          PASS=0
          TOTAL=0

          for v in A B C D E F G; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/hero-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in A B C D E F; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/features-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in A B C D E F; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/testimonial-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in PRICING COMPARE_PRICING BRAND_WALL CTA FAQ_A FAQ_B; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/conversion-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in A B C; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/footer-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in ABOUT CONTACT BLOG; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/page-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in NEWSLETTER WAITLIST CONTACT_INLINE; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/form-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          for v in TEAM STATS LOGO_SCROLL GALLERY INTEGRATIONS TIMELINE; do
            TOTAL=$((TOTAL+1))
            python assets/scripts/extract_variant.py assets/sections/extra-variants.html $v > /dev/null && PASS=$((PASS+1))
          done

          echo "$PASS/$TOTAL variants OK"
          [ "$PASS" -eq "$TOTAL" ] || exit 1

      - name: Validate evals.json
        run: |
          python -c "
          import json
          d = json.load(open('evals/evals.json'))
          assert d['skill_name'] == 'citycraft', f'Wrong skill name: {d[\"skill_name\"]}'
          assert len(d['evals']) >= 9, f'Too few evals: {len(d[\"evals\"])}'
          print(f'Evals: {len(d[\"evals\"])} cases OK')
          "

      - name: Validate SKILL.md frontmatter
        run: |
          python -c "
          text = open('SKILL.md').read()
          assert text.startswith('---'), 'Missing frontmatter'
          assert 'name: citycraft' in text[:500], 'Missing name field'
          assert 'description:' in text[:500], 'Missing description field'
          print('SKILL.md frontmatter: OK')
          "
