name: Internal Build [Android & IOS]
run-name: ${{ inputs.buildname }}

on:
  workflow_dispatch:
    inputs:
      release:
        description: 'Internal/Beta'
        required: true
        default: 'internal'
        type: choice
        options:
          - internal
          - beta
      buildFor:
        description: 'Build'
        required: true
        default: 'Both[Android and IOS]'
        type: choice
        options:
          - Both[Android and IOS]
          - Android
          - IOS
      buildName:
        description: 'Build App For'
        required: true
        default: 'Sprint-x/QA-Inji/Release-x.x.x'
        type: string
      mimotoBackendServiceUrl:
        description: 'Mimoto backend service URL'
        required: true
        default: 'https://api.sandbox.mosip.net'
        type: string
      esignetBackendServiceUrl:
        description: 'Esignet backend service URL'
        required: true
        default: 'https://api.sandbox.mosip.net'
        type: string
      injiFlavor:
        description: 'Select Inji flavor'
        required: true
        default: 'Inji'
        type: choice
        options:
          - residentapp
          - inji
          - collab
          - synergy
          - mec
      internal-testers:
        description: 'Internal Testers Group'
        required: true
        default: 'QA-Triple'
        type: choice
        options:
          - Dev-testing
          - MEC
          - QA
          - MOSIP-Collab
          - MOSIP-Dev-testing
      theme:
        description: 'Application Theme'
        required: true
        default: 'gradient'
        type: choice
        options:
          - gradient
          - purple
      allow_env_edit:
        description: 'Edit ENV'
        required: true
        default: 'true'
        type: choice
        options:
          - false
          - true
      enable_auth:
        description: 'Enable Authentication'
        required: true
        default: 'true'
        type: choice
        options:
          - false
          - true

jobs:
  set-client-id:
    runs-on: ubuntu-latest
    outputs:
      CLIENT_ID: ${{ steps.client-id.outputs.CLIENT_ID }}
    steps:
      - uses: actions/checkout@v3.1.0
      - name: Set Google client id
        id: client-id
        run: |
          cd .github/scripts
          ./set-google-clientid.sh "$INJI_FLAVOR"
        env:
          INJI_FLAVOR: ${{ github.event.inputs.injiFlavor }}

  build-android:
    if: ${{ inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'Android'}}
    needs: set-client-id
    uses: mosip/kattu/.github/workflows/android-publish.yml@master
    with:
      RELEASE: ${{ inputs.release }}
      NODE_VERSION: '18.x'
      JAVA_VERSION: '17'
      RELEASE_KEYSTORE_ALIAS: androidreleasekey
      MIMOTO_HOST: ${{ inputs.mimotoBackendServiceUrl }}
      ESIGNET_HOST: ${{ inputs.esignetBackendServiceUrl }}
      APPLICATION_THEME: ${{ inputs.theme }}
      BUILD_DESCRIPTION: ${{ inputs.buildName }}
      ALLOW_ENV_EDIT: ${{ inputs.allow_env_edit }}
      LIVENESS_DETECTION: 'false'
      APP_FLAVOR: ${{ inputs.injiFlavor }}
      SERVICE_LOCATION: '.'
      ANDROID_SERVICE_LOCATION: 'android'
      BUILD_SCRIPT_LOCATION: 'scripts'
      SCRIPT_NAME: "./${{ inputs.release }}.sh"
      ANDROID_ARTIFACT_NAME: ${{ inputs.buildname }}
      ANDROID_ARTIFACT_PATH: "android/app/build/outputs/apk/${{ inputs.injiFlavor }}/release/Inji_universal.apk"
    secrets:
      ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
      RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}'
      INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
      SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'
      GOOGLE_ANDROID_CLIENT_ID: ${{ secrets[needs.set-client-id.outputs.CLIENT_ID] }}

  build-android-beta:
    if: ${{ inputs.release == 'beta' && (inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'Android') }}
    uses: mosip/kattu/.github/workflows/android-publish.yml@master
    with:
      RELEASE: ${{ inputs.release }}
      NODE_VERSION: '18.x'
      JAVA_VERSION: '17'
      RELEASE_KEYSTORE_ALIAS: androidreleasekey
      MIMOTO_HOST: ${{ inputs.mimotoBackendServiceUrl }}
      ESIGNET_HOST: ${{ inputs.esignetBackendServiceUrl }}
      APPLICATION_THEME: ${{ inputs.theme }}
      BUILD_DESCRIPTION: ${{ inputs.buildName }}
      ALLOW_ENV_EDIT: ${{ inputs.allow_env_edit }}
      LIVENESS_DETECTION: ${{ inputs.liveness_detection }}
      APP_FLAVOR: ${{ inputs.injiFlavor }}
      SERVICE_LOCATION: '.'
      ANDROID_SERVICE_LOCATION: 'android'
      BUILD_SCRIPT_LOCATION: 'scripts'
      SCRIPT_NAME: "./${{ inputs.release }}.sh"
      ANDROID_ARTIFACT_NAME: ${{ inputs.buildname }}
      ANDROID_ARTIFACT_PATH: "android/app/build/outputs/apk/${{ inputs.injiFlavor }}/release/Inji_universal.apk"
    secrets:
      ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
      RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}'
      INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
      SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'
      GOOGLE_ANDROID_CLIENT_ID: ${{secrets.INJI_GOOGLE_CLIENT_ID}}

  build-ios:
    if: ${{ inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'IOS'}}
    uses: mosip/kattu/.github/workflows/ios-publish.yml@master
    with:
      NODE_VERSION: '18.x'
      MIMOTO_HOST: ${{ inputs.mimotoBackendServiceUrl }}
      ESIGNET_HOST: ${{ inputs.esignetBackendServiceUrl }}
      APPLICATION_THEME: ${{ inputs.theme }}
      TESTFLIGHT_BETA_APP_DESCRIPTION: ${{ inputs.buildName }}
      ALLOW_ENV_EDIT: ${{ inputs.allow_env_edit }}
      LIVENESS_DETECTION: ${{ inputs.liveness_detection }}
      ENABLE_AUTH: ${{ inputs.enable_auth }}
      TESTFLIGHT_INTERNAL_TESTERS_GROUP: ${{ inputs.internal-testers }}
      APP_FLAVOR: ${{ inputs.injiFlavor }}
      SERVICE_LOCATION: '.'
      IOS_SERVICE_LOCATION: 'ios'
      SCRIPT_NAME: "fastlane beta"
      IOS_ARTIFACT_NAME: "ios-artifacts"
      IOS_ARTIFACT_PATH: "ios/fastlane/Inji_artifacts/"
    secrets:
      APP_STORE_CONNECT_TEAM_ID: '${{ secrets.APP_STORE_CONNECT_TEAM_ID }}'
      DEVELOPER_APP_ID: '${{ secrets.IOS_INJI_DEVELOPER_APP_ID }}'
      INJI_IOS_DEVELOPER_APP_IDENTIFIER: '${{ secrets.INJI_IOS_DEVELOPER_APP_IDENTIFIER }}'
      INJI_IOS_DEVELOPER_PORTAL_TEAM_ID: '${{ secrets.INJI_IOS_DEVELOPER_PORTAL_TEAM_ID }}'
      INJI_IOS_FASTLANE_APPLE_ID: '${{ secrets.INJI_IOS_FASTLANE_APPLE_ID }}'
      INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: '${{ secrets.INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}'
      GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
      INJI_IOS_PROVISIONING_PROFILE_SPECIFIER: '${{ secrets.INJI_IOS_PROVISIONING_PROFILE_SPECIFIER }}'
      INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
      INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
      APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
      APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
      APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
      MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'
      SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'

  # sonar-check:
  #   uses: mosip/kattu/.github/workflows/gradlew-sonar-analysis.yml@master
  #   with:
  #     SERVICE_LOCATION: '.'
  #     ANDROID_LOCATION: 'android'
  #     SONAR_ARGS: -Dsonarqube
  #   secrets:
  #     SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
  #     SONAR_ORGANIZATION: ${{ secrets.ORG_KEY }}
  #     SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'