name: Move labelled issues to correct boards and columns

on:
  issues:
    types: [labeled]

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-Polls') ||
      contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
      contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') ||
      contains(github.event.issue.labels.*.name, 'Z-IA') ||
      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-Rich-Text-Editor')
    steps:
      - uses: actions/github-script@v5
        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@v5
        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
    # Skip in forks
    if: github.repository == 'vector-im/element-android'
    steps:
      - uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338
        with:
          action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
          project-url: "https://github.com/vector-im/element-android/projects/4"
          column-name: "Need info"
          label-name: "X-Needs-Info"

  add_design_issues_to_project:
    name: X-Needs-Design to Design project board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      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: octokit/graphql-action@v2.x
        id: add_to_project
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc0sUA"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  add_product_issues:
    name: X-Needs-Product to Design project board
    runs-on: ubuntu-latest
    if: >
      contains(github.event.issue.labels.*.name, 'X-Needs-Product')
    steps:
      - uses: octokit/graphql-action@v2.x
        id: add_to_project
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4AAg6N"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  delight_issues_to_board:
    name: Spaces issues to Delight project board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      (contains(github.event.issue.labels.*.name, 'Team: Delight') ||
       contains(github.event.issue.labels.*.name, 'Z-AppLayout'))
    steps:
      - uses: octokit/graphql-action@v2.x
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc1HvQ"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  move_voice-message_issues:
    name: A-Voice Messages to voice message board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      contains(github.event.issue.labels.*.name, 'A-Voice Messages')
    steps:
      - uses: octokit/graphql-action@v2.x
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc2KCw"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
  move_message_bubbles_issues:
    name: A-Message-Bubbles to Message bubbles board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
    steps:
      - uses: octokit/graphql-action@v2.x
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc3m-g"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  move_ftue_issues:
    name: Z-FTUE to Mobile FTUE board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      contains(github.event.issue.labels.*.name, 'Z-FTUE')
    steps:
      - uses: octokit/graphql-action@v2.x
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4AAqVx"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  move_WTF_issues:
    name: Z-WTF to WTF board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      contains(github.event.issue.labels.*.name, 'Z-WTF')
    steps:
      - uses: octokit/graphql-action@v2.x
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4AArk0"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  move_element_x_issues:
    name: ElementX issues to ElementX project board
    runs-on: ubuntu-latest
    # Skip in forks
    if: >
      github.repository == 'vector-im/element-android' &&
      (contains(github.event.issue.labels.*.name, 'Z-BBQ-Alpha') ||
        contains(github.event.issue.labels.*.name, 'Z-BBQ-Beta') ||
        contains(github.event.issue.labels.*.name, 'Z-BBQ-Release') ||
        contains(github.event.issue.labels.*.name, 'Z-Banquet-Alpha') ||
        contains(github.event.issue.labels.*.name, 'Z-Banquet-Beta') ||
        contains(github.event.issue.labels.*.name, 'Z-Banquet-Release'))
    steps:
      - uses: octokit/graphql-action@v2.x
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
            mutation add_to_project($projectid:ID!,$contentid:ID!) {
              addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                }
              }
            }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4ABTXY"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  ps_features1:
    name: Add labelled issues to PS features team 1
    runs-on: ubuntu-latest
    if: >
      contains(github.event.issue.labels.*.name, 'A-Polls') ||
      contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
      (contains(github.event.issue.labels.*.name, 'A-Voice-Messages') &&
        !contains(github.event.issue.labels.*.name, 'A-Broadcast')) ||
      (contains(github.event.issue.labels.*.name, 'A-Session-Mgmt') &&
        contains(github.event.issue.labels.*.name, 'A-User-Settings'))
    steps:
      - uses: octokit/graphql-action@v2.x
        id: add_to_project
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
              mutation add_to_project($projectid:ID!,$contentid:ID!) {
                addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                  }
                }
              }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4AHJKF"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  ps_features2:
    name: Add labelled issues to PS features team 2
    runs-on: ubuntu-latest
    if: >
      contains(github.event.issue.labels.*.name, 'A-DM-Start') ||
      contains(github.event.issue.labels.*.name, 'A-Broadcast')
    steps:
      - uses: octokit/graphql-action@v2.x
        id: add_to_project
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
              mutation add_to_project($projectid:ID!,$contentid:ID!) {
                addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                  }
                }
              }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4AHJKd"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

  ps_features3:
    name: Add labelled issues to PS features team 3
    runs-on: ubuntu-latest
    if: >
      contains(github.event.issue.labels.*.name, 'A-Rich-Text-Editor')
    steps:
      - uses: octokit/graphql-action@v2.x
        id: add_to_project
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
              mutation add_to_project($projectid:ID!,$contentid:ID!) {
                addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                  }
                }
              }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4AHJKW"
          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: octokit/graphql-action@v2.x
        id: add_to_project
        with:
          headers: '{"GraphQL-Features": "projects_next_graphql"}'
          query: |
              mutation add_to_project($projectid:ID!,$contentid:ID!) {
                addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
                item {
                  id
                  }
                }
              }
          projectid: ${{ env.PROJECT_ID }}
          contentid: ${{ github.event.issue.node_id }}
        env:
          PROJECT_ID: "PVT_kwDOAM0swc4ABMIk"
          GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}