name: Move labelled issues to correct projects

on:
    issues:
        types: [labeled]
    workflow_call:
        secrets:
            ELEMENT_BOT_TOKEN:
                required: true

jobs:
    apply_Z-Labs_label:
        name: Add Z-Labs label for features behind labs flags
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'A-Maths') ||
            contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
            contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
            contains(github.event.issue.labels.*.name, 'Z-IA') ||
            contains(github.event.issue.labels.*.name, 'A-Jump-To-Date ') ||
            contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
            contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
            contains(github.event.issue.labels.*.name, 'A-Tags') ||
            contains(github.event.issue.labels.*.name, 'A-Video-Rooms') ||
            contains(github.event.issue.labels.*.name, 'A-Message-Starring') ||
            contains(github.event.issue.labels.*.name, 'A-Rich-Text-Editor') ||
            contains(github.event.issue.labels.*.name, 'A-Element-Call') ||
            contains(github.event.issue.labels.*.name, 'A-Element-R')
        steps:
            - uses: actions/github-script@v7
              with:
                  script: |
                      github.rest.issues.addLabels({
                        issue_number: context.issue.number,
                        owner: context.repo.owner,
                        repo: context.repo.repo,
                        labels: ['Z-Labs']
                      })

    apply_Help-Wanted_label:
        name: Add "Help Wanted" label to all "good first issue" and Hacktoberfest
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'good first issue') ||
            contains(github.event.issue.labels.*.name, 'Hacktoberfest')
        steps:
            - uses: actions/github-script@v7
              with:
                  script: |
                      github.rest.issues.addLabels({
                        issue_number: context.issue.number,
                        owner: context.repo.owner,
                        repo: context.repo.repo,
                        labels: ['Help Wanted']
                      })

    move_needs_info_issues:
        name: X-Needs-Info issues to Need info column on triage board
        runs-on: ubuntu-latest
        steps:
            - uses: konradpabjan/move-labeled-or-milestoned-issue@190352295fe309fcb113b49193bc81d9aaa9cb01
              with:
                  action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
                  project-url: "https://github.com/vector-im/element-web/projects/27"
                  column-name: "Need info"
                  label-name: "X-Needs-Info"

    add_priority_design_issues_to_project:
        name: P1 X-Needs-Design to Design project board
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'X-Needs-Design') &&
            (contains(github.event.issue.labels.*.name, 'S-Critical') &&
             (contains(github.event.issue.labels.*.name, 'O-Frequent') ||
              contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
             contains(github.event.issue.labels.*.name, 'S-Major') &&
             contains(github.event.issue.labels.*.name, 'O-Frequent') ||
             contains(github.event.issue.labels.*.name, 'A11y'))
        steps:
            - uses: actions/add-to-project@main
              with:
                  project-url: https://github.com/orgs/vector-im/projects/18
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

    add_product_issues:
        name: X-Needs-Product to product project board
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'X-Needs-Product')
        steps:
            - uses: actions/add-to-project@main
              with:
                  project-url: https://github.com/orgs/vector-im/projects/28
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

    Search_issues_to_board:
        name: Search issues to project board
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'A-New-Search-Experience')
        steps:
            - uses: actions/add-to-project@main
              with:
                  project-url: https://github.com/orgs/vector-im/projects/48
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

    voip:
        name: Add labelled issues to VoIP project board
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'Team: VoIP')
        steps:
            - uses: actions/add-to-project@main
              with:
                  project-url: https://github.com/orgs/vector-im/projects/41
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

    verticals_feature:
        name: Add labelled issues to Verticals Feature project
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'Team: Verticals Feature')
        steps:
            - uses: actions/add-to-project@main
              with:
                  project-url: https://github.com/orgs/vector-im/projects/57
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

    tech_debt:
        name: Add labelled issues to tech debt project
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'A-Developer-Experience') ||
            contains(github.event.issue.labels.*.name, 'A-Documentation') ||
            contains(github.event.issue.labels.*.name, 'A-Packaging') ||
            contains(github.event.issue.labels.*.name, 'A-Technical-Debt') ||
            contains(github.event.issue.labels.*.name, 'A-Testing') ||
            contains(github.event.issue.labels.*.name, 'Z-Flaky-Test')
        steps:
            - uses: actions/add-to-project@main
              with:
                  project-url: https://github.com/orgs/vector-im/projects/101
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

    element_r:
        name: Add Element R issues to Crypto Team board
        runs-on: ubuntu-latest
        if: >
            contains(github.event.issue.labels.*.name, 'A-Element-R')
        steps:
            - id: add_to_project
              uses: actions/add-to-project@v0.5.0
              with:
                  project-url: ${{ env.PROJECT_URL }}
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

            - id: set_fields
              uses: titoportas/update-project-fields@421a54430b3cdc9eefd8f14f9ce0142ab7678751 # v0.1.0
              with:
                  project-url: ${{ env.PROJECT_URL }}
                  github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
                  item-id: ${{ steps.add_to_project.outputs.itemId }} # Use the item-id output of the previous step
                  field-keys: Workstream,module
                  field-values: Element-R,web
        env:
            PROJECT_URL: https://github.com/orgs/vector-im/projects/76
