lib/ImportBatches.ps1


#Import Batches
Function Get-TMImportBatch {
    param(
        [Parameter(Mandatory = $false)][String]$TMSession = "Default",
        [Parameter(Mandatory = $false)][int]$BatchId,
        [Parameter(Mandatory = $false)][String]$Server = $global:TMSessions[$TMSession].TMServer,
        [Parameter(Mandatory = $false)]$AllowInsecureSSL = $global:TMSessions[$TMSession].AllowInsecureSSL
    )

    ## Get Session Configuration
    $TMSessionConfig = $global:TMSessions[$TMSession]
    if (-not $TMSessionConfig) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    #Honor SSL Settings
    if ($TMSessionConfig.AllowInsecureSSL) {
        $TMCertSettings = @{SkipCertificateCheck = $true }
    }
    else { 
        $TMCertSettings = @{SkipCertificateCheck = $false }
    }

    ## Construct the server URI
    $instance = $Server.Replace('/tdstm', '')
    $instance = $instance.Replace('https://', '')
    $instance = $instance.Replace('http://', '')
    
    ## Handle the URL Creation based on the TM Version
    if ($global:TMSessions[$TMSession].TMVersion.Major -eq 4) {
        $uri = "https://$Instance/tdstm/module/importbatch/$($BatchId ? $BatchId : "list")"
    }
    elseif ($global:TMSessions[$TMSession].TMVersion.Major -eq 5) {
        $uri = "https://$Instance/tdstm/ws/import/batches"
    }
    else {
        $uri = "https://$Instance/tdstm/ws/import/batches"
    }

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = ($response.Content | ConvertFrom-Json).data
        }
        return @($Result)
    }
    catch {
        throw $_
    }
}

#Import Batch Records
Function Get-TMImportBatchRecord {
    param(
        [Parameter(Mandatory = $false)][String]$TMSession = "Default",
        [Parameter(Mandatory = $true)][int]$BatchId,
        [Parameter(Mandatory = $false)][int]$RecordId,
        [Parameter(Mandatory = $false)][String]$Server = $global:TMSessions[$TMSession].TMServer,
        [Parameter(Mandatory = $false)]$AllowInsecureSSL = $global:TMSessions[$TMSession].AllowInsecureSSL
    )
    ## Get Session Configuration
    $TMSessionConfig = $global:TMSessions[$TMSession]
    if (-not $TMSessionConfig) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    #Honor SSL Settings
    if ($TMSessionConfig.AllowInsecureSSL) {
        $TMCertSettings = @{SkipCertificateCheck = $true }
    }
    else { 
        $TMCertSettings = @{SkipCertificateCheck = $false }
    }

    ## Construct the server URI
    $instance = $Server.Replace('/tdstm', '')
    $instance = $instance.Replace('https://', '')
    $instance = $instance.Replace('http://', '')
    
    ## Check version 4
    if ($global:TMSessions[$TMSession].TMVersion -like '4*') {

        ## TODO Get the 4.7 Web Service URI for this
        $uri = "https://$Instance/tdstm/module/importbatch/$($BatchId ? $BatchId : "list")"
    }
    else {
        if (-not $RecordId) {

            ## Get a List of the records if no specific record was requested
            $uri = "https://$Instance/tdstm/ws/import/batch/$($BatchId)/records"
        }
        else {
            ## Get a specific record
            $uri = "https://$Instance/tdstm/ws/import/batch/$($BatchId)/record/$($RecordId)"

        }
    }

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = ($response.Content | ConvertFrom-Json).data
        }
        return @($Result)
    }
    catch {
        throw $_
    }
}


Function Start-TMImportBatch {
    param(
        [Parameter(Mandatory = $false)][String]$TMSession = "Default",
        [Parameter(Mandatory = $true)][int[]]$BatchId
    )
    ## Get Session Configuration
    $TMSessionConfig = $global:TMSessions[$TMSession]
    if (-not $TMSessionConfig) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    ## Construct the server URI
    $uri = "https://$($TMSessionConfig.TMServer)/tdstm/ws/import/batches"
    
    $PatchBody = @{
        action = "QUEUE"
        ids     = $BatchId
    } | ConvertTo-Json

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Patch -Body $PatchBody -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = $response.Content | ConvertFrom-Json
            if ($Result.status -ne 'Success') {
                throw $Result.errors
            }
        }
    }
    catch {
        throw $_
    }
}