name: Deploy SDK

on:
  release:
    types:
      - published

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    name: Deploy SDK to NPM
    runs-on: ubuntu-latest
    env:
      BW_ACCOUNT_ID: ${{ secrets.BW_ACCOUNT_ID }}
      BW_USERNAME: ${{ secrets.BW_USERNAME }}
      BW_PASSWORD: ${{ secrets.BW_PASSWORD }}
      BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }}
      BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }}
      BW_USERNAME_FORBIDDEN: ${{ secrets.BW_USERNAME_FORBIDDEN }}
      BW_PASSWORD_FORBIDDEN: ${{ secrets.BW_PASSWORD_FORBIDDEN }}
      BW_VOICE_APPLICATION_ID: ${{ secrets.BW_VOICE_APPLICATION_ID }}
      BW_MESSAGING_APPLICATION_ID: ${{ secrets.BW_MESSAGING_APPLICATION_ID }}
      BW_NUMBER: ${{ secrets.BW_NUMBER }}
      USER_NUMBER: ${{ secrets.USER_NUMBER }}
      BASE_CALLBACK_URL: ${{ secrets.BASE_CALLBACK_URL }}
      OPERATING_SYSTEM: "ubuntu"
      MANTECA_ACTIVE_NUMBER: ${{ secrets.MANTECA_ACTIVE_NUMBER }}
      MANTECA_IDLE_NUMBER: ${{ secrets.MANTECA_IDLE_NUMBER }}
      MANTECA_BASE_URL: ${{ secrets.MANTECA_BASE_URL }}
      MANTECA_APPLICATION_ID: ${{ secrets.MANTECA_APPLICATION_ID }}
      BW_NUMBER_PROVIDER: ${{ secrets.BW_NUMBER_PROVIDER }}

    steps:
      - name: Set Release Version
        run: |
          RELEASE_VERSION=${GITHUB_REF#refs/tags/v}
          if [[ $RELEASE_VERSION =~ ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)?$ ]]; then
            echo "PACKAGE_VERSION=$RELEASE_VERSION" >> $GITHUB_ENV
          else
            echo 'Tag does not match expected semver regex pattern (^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)?$)'
            echo $RELEASE_VERSION
            echo 'Please update your tag to match the expected regex pattern'
            exit 1
          fi

      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: 20
          registry-url: "https://registry.npmjs.org"

      - name: Update NPM
        run: npm install -g npm@latest

      - name: Set OpenAPI Generator Version
        run: |
          OPENAPI_VERSION=$(jq .[\"generator-cli\"].version openapitools.json)
          echo "OPENAPI_GENERATOR_VERSION=$OPENAPI_VERSION" >> $GITHUB_ENV
        shell: bash

      - name: Generate SDK with Updated Version
        uses: Bandwidth/generate-sdk-action@v4.0.0
        with:
          openapi-generator-version: ${{ env.OPENAPI_GENERATOR_VERSION }}
          language: typescript-axios
          additional-properties: --additional-properties=npmVersion=$PACKAGE_VERSION

      - name: Install Packages and Test
        run: |
          yarn
          npm install -g @stoplight/prism-cli
          prism mock ./bandwidth.yml & yarn test-unit
        shell: bash

      - name: Publish npm Package
        run: |
          npm version $PACKAGE_VERSION --no-git-tag-version
          npm publish --access public

      - uses: Bandwidth/build-notify-slack-action@v2
        if: always()
        with:
          job-status: ${{ job.status }}
          slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
          slack-channel: ${{ secrets.SLACK_CHANNEL }}
