name: Build and Package RyukGram

on:
    workflow_dispatch:
        inputs:
            decrypted_instagram_url:
                description: "The direct URL to the decrypted Instagram IPA"
                default: ""
                required: true
                type: string
            upload_artifact:
                description: "Upload Artifact"
                default: true
                required: false
                type: boolean
            build_tipa:
                description: "Build tipa"
                default: false
                required: false
                type: boolean

concurrency:
    group: ${{ github.workflow }}-${{ github.ref }}
    cancel-in-progress: true
jobs:
    build:
        name: Build RyukGram
        runs-on: macos-latest
        permissions:
            contents: write

        steps:
            - name: Checkout Main
              uses: actions/checkout@v4
              with:
                path: main
                submodules: recursive

            - name: Install Dependencies
              run: brew install ldid dpkg make

            - name: Set PATH environment variable
              run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH

            - name: Setup Theos
              uses: actions/checkout@v4
              with:
                repository: theos/theos
                ref: master
                path: ${{ github.workspace }}/theos
                submodules: recursive

            - name: SDK Caching
              id: SDK
              uses: actions/cache@v4
              env:
                cache-name: iPhoneOS16.2.sdk
              with:
                path: ${{ github.workspace }}/theos/sdks/
                key: ${{ env.cache-name }}
                restore-keys: ${{ env.cache-name }}

            - name: Download iOS SDK
              if: steps.SDK.outputs.cache-hit != 'true'
              run: |
                git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/xybp888/iOS-SDKs/
                cd iOS-SDKs
                git sparse-checkout set --no-cone iPhoneOS16.2.sdk
                git checkout
                mv *.sdk $THEOS/sdks
              env:
                THEOS: ${{ github.workspace }}/theos

            - name: Prepare Instagram IPA
              run: |
                cd main
                mkdir -p packages
                wget "$Instagram_URL" --no-verbose -O packages/com.burbn.instagram.ipa
                ls -la packages
              env:
                THEOS: ${{ github.workspace }}/theos
                Instagram_URL: ${{ inputs.decrypted_instagram_url }}

            - name: Get Version
              id: version
              run: |
                VERSION=$(awk '/Version:/ {print $2}' main/control)
                echo "VERSION=${VERSION}" >> "$GITHUB_ENV"
                echo "version=${VERSION}" >> "$GITHUB_OUTPUT"

            - name: Setup FFmpegKit
              run: cd main && ./scripts/setup-ffmpegkit.sh

            - name: Build sideloaded IPA (rootless deb → cyan inject)
              run: |
                pip install --force-reinstall https://github.com/asdfzxcvbn/pyzule-rw/archive/main.zip

                cd main
                curl -Lo ipapatch https://github.com/asdfzxcvbn/ipapatch/releases/download/v2.1.3/ipapatch.macos-arm64
                chmod +x ipapatch
                export PATH=.:$PATH

                ./build.sh sideload
                ls -la packages
              env:
                THEOS: ${{ github.workspace }}/theos

            - name: Rename IPA
              run: |
                cd main/packages
                IPA=$(ls -t *.ipa | grep -iv instagram | head -n1)
                [ -n "$IPA" ] && mv "$IPA" "RyukGram_sideloaded_v${VERSION}.ipa"

            - name: Duplicate as .tipa
              if: ${{ inputs.build_tipa }}
              run: |
                cd main/packages
                cp "RyukGram_sideloaded_v${VERSION}.ipa" "RyukGram_trollstore_v${VERSION}.tipa"

            - name: Pass package name to upload action
              id: package_name
              run: |
                echo "package=$(ls -t main/packages/RyukGram_sideloaded_v*.ipa | head -n1 | xargs basename)" >> "$GITHUB_OUTPUT"

            - name: Upload IPA Artifact
              if: ${{ inputs.upload_artifact }}
              uses: actions/upload-artifact@v4
              with:
                name: RyukGram_sideloaded_v${{ steps.version.outputs.version }}
                path: ${{ github.workspace }}/main/packages/${{ steps.package_name.outputs.package }}
                if-no-files-found: error

            - name: Upload TIPA Artifact
              if: ${{ inputs.upload_artifact && inputs.build_tipa }}
              uses: actions/upload-artifact@v4
              with:
                name: RyukGram_trollstore_v${{ steps.version.outputs.version }}
                path: ${{ github.workspace }}/main/packages/RyukGram_trollstore_v*.tipa
                if-no-files-found: error

            - name: Create Release
              uses: softprops/action-gh-release@v2.0.6
              with:
                name: RyukGram_sideloaded_v${{ steps.version.outputs.version }}
                files: |
                    ${{ github.workspace }}/main/packages/RyukGram_sideloaded_v*.ipa
                    ${{ github.workspace }}/main/packages/RyukGram_trollstore_v*.tipa
                draft: true

            - name: Output Release URL
              run: |
                echo "::notice::Release available at: https://github.com/${{ github.repository }}/releases"
