parameters:
  - name: PackageInfoLocations
    type: object
    default: []
  - name: RepoId
    type: string
    default: $(Build.Repository.Name)
  - name: WorkingDirectory
    type: string
    default: ''
  - name: ScriptDirectory
    type: string
    default: eng/common/scripts
  - name: TargetDocRepoName
    type: string
    default: ''
  - name: TargetDocRepoOwner
    type: string
  - name: Language
    type: string
    default: ''
  - name: DailyDocsBuild
    type: boolean
    default: false
  - name: SparseCheckoutPaths
    type: object
    default:
      - '**'

steps:
- template: /eng/common/pipelines/templates/steps/enable-long-path-support.yml

- pwsh: |
    Write-Host "###vso[task.setvariable variable=DocRepoLocation]${{ parameters.WorkingDirectory }}/doc"
  displayName: Set $(DocRepoLocation)

- template: /eng/common/pipelines/templates/steps/sparse-checkout.yml
  parameters:
    SkipDefaultCheckout: true
    Repositories:
      - Name: ${{ parameters.TargetDocRepoOwner }}/${{ parameters.TargetDocRepoName }}
        WorkingDirectory: $(DocRepoLocation)
    Paths: ${{ parameters.SparseCheckoutPaths }}

# If performing a daily docs build set the $(TargetBranchName) to a daily branch
# name and attempt to checkout the daily docs branch. If the branch doesn't
# exist, create it
- ${{ if eq(parameters.DailyDocsBuild, 'true') }}:
  - template: /eng/common/pipelines/templates/steps/set-daily-docs-branch-name.yml

  - pwsh: |
      $ErrorActionPreference = "Continue"
      $RemoteName = "origin"
      $BranchName = "$(TargetBranchName)"
      # Fetch and checkout remote branch if it already exists otherwise create a new branch.
      git ls-remote --exit-code --heads $RemoteName $BranchName
      if ($LASTEXITCODE -eq 0) {
        Write-Host "git fetch $RemoteName $BranchName"
        git fetch $RemoteName $BranchName
        Write-Host "git checkout $BranchName."
        git checkout $BranchName
      } else {
        Write-Host "git checkout -b $BranchName."
        git checkout -b $BranchName
      }
    displayName: Checkout daily docs branch if it exists
    workingDirectory: $(DocRepoLocation)

# If NOT performing a daily docs build, set the $(TargetBranchName) to the 
# default branch of the documentation repository.
- ${{ if ne(parameters.DailyDocsBuild, 'true') }}:
  - template: /eng/common/pipelines/templates/steps/set-default-branch.yml
    parameters:
      WorkingDirectory: $(DocRepoLocation)
      DefaultBranchVariableName: TargetBranchName

- pwsh: |
    $packageInfoJson = '${{ convertToJson(parameters.PackageInfoLocations) }}'.Trim('"')
    $packageInfoLocations = ConvertFrom-Json $packageInfoJson
    ${{ parameters.ScriptDirectory }}/Update-DocsMsMetadata.ps1 `
      -PackageInfoJsonLocations $packageInfoLocations `
      -DocRepoLocation "$(DocRepoLocation)" `
      -Language '${{parameters.Language}}' `
      -RepoId '${{ parameters.RepoId }}'
  displayName: Apply Documentation Updates

- template: /eng/common/pipelines/templates/steps/git-push-changes.yml
  parameters:
    BaseRepoBranch: $(TargetBranchName)
    BaseRepoOwner: ${{ parameters.TargetDocRepoOwner }}
    CommitMsg: "Update docs metadata"
    TargetRepoName: ${{ parameters.TargetDocRepoName }}
    TargetRepoOwner: ${{ parameters.TargetDocRepoOwner }}
    WorkingDirectory: $(DocRepoLocation)
    ScriptDirectory: ${{ parameters.WorkingDirectory }}/${{ parameters.ScriptDirectory }}
