# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Python test
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

concurrency:
  group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
  cancel-in-progress: true

jobs:
  test-matrix:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version:
          - "3.10"
          - "3.11"
          - "3.12"
          - "3.13"
          - "3.14"
        toolchain:
          - "stable"

    steps:
      - uses: actions/checkout@v5

      - name: Verify example datafusion version
        run: |
          MAIN_VERSION=$(grep -A 1 "name = \"datafusion-common\"" Cargo.lock | grep "version = " | head -1 | sed 's/.*version = "\(.*\)"/\1/')
          EXAMPLE_VERSION=$(grep -A 1 "name = \"datafusion-common\"" examples/datafusion-ffi-example/Cargo.lock | grep "version = " | head -1 | sed 's/.*version = "\(.*\)"/\1/')
          echo "Main crate datafusion version: $MAIN_VERSION"
          echo "FFI example datafusion version: $EXAMPLE_VERSION"
          
          if [ "$MAIN_VERSION" != "$EXAMPLE_VERSION" ]; then
            echo "❌ Error: FFI example datafusion versions don't match!"
            exit 1
          fi

      - name: Setup Rust Toolchain
        uses: dtolnay/rust-toolchain@stable
        id: rust-toolchain
        with:
          components: clippy,rustfmt

      - name: Install Protoc
        uses: arduino/setup-protoc@v3
        with:
          version: '27.4'
          repo-token: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}

      - name: Cache Cargo
        uses: actions/cache@v4
        with:
          path: ~/.cargo
          key: cargo-cache-${{ steps.rust-toolchain.outputs.cachekey }}-${{ hashFiles('Cargo.lock') }}

      - name: Run Clippy
        if: ${{ matrix.python-version == '3.10' && matrix.toolchain == 'stable' }}
        run: cargo clippy --all-targets --all-features -- -D clippy::all -D warnings -A clippy::redundant_closure

      - name: Install dependencies and build
        uses: astral-sh/setup-uv@v7
        with:
            enable-cache: true

      - name: Run tests
        env:
          RUST_BACKTRACE: 1
        run: |
          git submodule update --init
          uv sync --dev --no-install-package datafusion
          uv run --no-project maturin develop --uv
          uv run --no-project pytest -v .

      - name: FFI unit tests
        run: |
          cd examples/datafusion-ffi-example
          uv run --no-project maturin develop --uv
          uv run --no-project pytest python/tests/_test*.py

      - name: Cache the generated dataset
        id: cache-tpch-dataset
        uses: actions/cache@v4
        with:
          path: benchmarks/tpch/data
          key: tpch-data-2.18.0

      - name: Run dbgen to create 1 Gb dataset
        if: ${{ steps.cache-tpch-dataset.outputs.cache-hit != 'true' }}
        run: |
          cd benchmarks/tpch
          RUN_IN_CI=TRUE ./tpch-gen.sh 1

      - name: Run TPC-H examples
        run: |
          cd examples/tpch
          uv run --no-project python convert_data_to_parquet.py
          uv run --no-project pytest _tests.py

  nightly-fmt:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v5

      - name: Setup Rust Toolchain
        uses: dtolnay/rust-toolchain@stable
        id: rust-toolchain
        with:
          toolchain: "nightly"
          components: clippy,rustfmt

      - name: Check Formatting
        run: cargo +nightly fmt -- --check
