name: Build Tweak
on:
  workflow_dispatch:
    inputs:
      tweak:
        description: 'Tweak folder to build (e.g., BusinessJB, CreditAgricoleJB, Infuse-iOS, TF1Plus/TF1Plus-tvOS)'
        required: false
        default: 'BusinessJB'
      branch:
        description: 'Branch to build from'
        required: false
        default: 'main'
   
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.tweak || 'BusinessJB' }}
  cancel-in-progress: true

jobs:
  build:
    name: Build ${{ inputs.tweak || 'BusinessJB' }}
    runs-on: macos-latest
    permissions:
      contents: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          ref: ${{ inputs.branch || github.ref }}

      - name: Cache Homebrew packages
        uses: actions/cache@v4
        with:
          path: ~/Library/Caches/Homebrew
          key: brew-${{ runner.os }}-make-ldid
          restore-keys: |
            brew-${{ runner.os }}-

      - name: Install dependencies
        run: brew install make ldid

      - name: Set PATH environment variables
        run: |
          echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
          echo "THEOS=${{ github.workspace }}/theos" >> $GITHUB_ENV

      - name: Get Theos and dependencies commit
        run: |
          get_commit_hash() {
            local repo_url=$1
            git ls-remote "$repo_url" HEAD | awk '{print substr($1,1,7)}'
          }
          TWEAK_PATH="${{ inputs.tweak || 'BusinessJB' }}"
          if [[ "$TWEAK_PATH" == *"tvOS"* || "$TWEAK_PATH" == *"TVOS"* ]]; then
            THEOS_URL="https://github.com/NohamR/theos-tvOS"
          else
            THEOS_URL="https://github.com/roothide/theos"
          fi
          echo "THEOS_REPO=$THEOS_URL" >> $GITHUB_ENV
          echo "THEOS_COMMIT=$(get_commit_hash "$THEOS_URL")" >> $GITHUB_ENV
          echo "PSHEADER_COMMIT=$(get_commit_hash "https://github.com/PoomSmart/PSHeader.git")" >> $GITHUB_ENV
          echo "SDK_COMMIT=$(get_commit_hash "https://github.com/Tonwalter888/iOS-SDKs.git")" >> $GITHUB_ENV

      - name: Cache Theos
        id: cache-theos
        uses: actions/cache@v4
        with:
          path: theos
          key: Theos-${{ env.THEOS_COMMIT }}-SDK-${{ env.SDK_COMMIT }}-PSHeader-${{ env.PSHEADER_COMMIT }}
          restore-keys: |
            Theos-${{ env.THEOS_COMMIT }}-SDK-${{ env.SDK_COMMIT }}-
            Theos-${{ env.THEOS_COMMIT }}-

      - name: Setup Theos
        if: ${{ steps.cache-theos.outputs.cache-hit != 'true' }}
        run: |
            git clone --quiet --depth=1 --recurse-submodules ${{ env.THEOS_REPO }}.git theos
            git clone --quiet --depth=1 -n --filter=tree:0 https://github.com/Tonwalter888/iOS-SDKs.git
            cd iOS-SDKs
            git sparse-checkout set --no-cone iPhoneOS18.6.sdk
            git checkout --quiet
            mv *.sdk "$THEOS/sdks"
            cd ${{ github.workspace }}
            git clone --quiet --depth=1 https://github.com/PoomSmart/PSHeader.git "$THEOS/include/PSHeader"

      - name: Build Tweak
        run: |
          TWEAK_PATH="${{ inputs.tweak || 'BusinessJB' }}"
          TWEAK_NAME=$(basename "$TWEAK_PATH")
          
          cd "$TWEAK_PATH"
          echo "TWEAK_VERSION=$(grep '^Version:' control | cut -d ' ' -f2)" >> $GITHUB_ENV
          echo "TWEAK_NAME=$TWEAK_NAME" >> $GITHUB_ENV
          
          # Check if this is a tvOS tweak
          if grep -q "TARGET.*appletv" Makefile; then
            # tvOS tweaks don't use rootless/roothide schemes
            make clean package DEBUG=0 FINALPACKAGE=1
          else
            # iOS tweaks build with multiple schemes
            make clean package DEBUG=0 FINALPACKAGE=1
            make clean package DEBUG=0 FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless
            make clean package DEBUG=0 FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide
          fi
          
          mv packages/*.deb ${{ github.workspace }}

      - name: Upload the tweak .deb(s)
        uses: actions/upload-artifact@v7
        with:
         name: ${{ env.TWEAK_NAME }} v${{ env.TWEAK_VERSION }}
         path: ${{ github.workspace }}/*.deb
         if-no-files-found: error
         overwrite: true

      - name: Create a draft release
        uses: softprops/action-gh-release@v3
        with:
          tag_name: ${{ env.TWEAK_NAME }}-v${{ env.TWEAK_VERSION }}
          name: ${{ env.TWEAK_NAME }} v${{ env.TWEAK_VERSION }}
          files: ${{ github.workspace }}/*.deb
          draft: true