Modules/support.psm1

# GET/api/v2/dd-systems/{SYSTEM-ID}/supports

function Get-DDSupport {
   [CmdletBinding()]
   param ( 
      [CmdletBinding()]
      [Parameter(Mandatory = $false, ParameterSetName = 'all')]
      [string]
      $SYSTEM_ID = $Global:DD_UUID,
      [Parameter(Mandatory = $false, ParameterSetName = 'all')]
      $body = @{}
   )
   begin {
      $Response = @()
      $METHOD = "GET"
   }
   process {
      switch ($PsCmdlet.ParameterSetName) {
         default {
            $apiver = "api/v2"
            $uri = "dd-systems/$($SYSTEM_ID)/supports"
         }             
      }
      $parameters = @{
         uri           = $uri          
         apiver        = $apiver
         Method        = $METHOD
         body          = $body
         RequestMethod = "REST"
         Verbose       = $PSBoundParameters['Verbose'] -eq $true
      }      
      try {
         $Response += Invoke-DDapirequest @Parameters
      }
      catch {
         Get-DDWebException  -ExceptionMessage $_
         break
      }
      write-verbose ($response | Out-String)
   }
   end {    
      switch ($PsCmdlet.ParameterSetName) {
         default {
            $response | Select-Object -ExcludeProperty links, link 
         }
        
      } 
       
   }
}

# PUT /api/v2/dd-systems/{SYSTEM-ID}/supports
function Set-DDSupport {
   [CmdletBinding()]
   param ( 
      [CmdletBinding()]
      [Parameter(Mandatory = $false, ParameterSetName = 'set_notification_status')]
      [string][ValidateSet('enabled', 'disabled')]$status,
      [Parameter(Mandatory = $true, ParameterSetName = 'set_notification_status')]
      [string][ValidateSet(
         "autosupport",
         "alerts",
         "all")]$notification,
      # [Parameter(Mandatory = $true, ParameterSetName = 'set_notification_status')]
      # [string]$destinationAddress,
      [Parameter(Mandatory = $true, ParameterSetName = 'set_notification')]
      [string][ValidateSet('email', 'esrs')]$notificationMethod,
      [Parameter(Mandatory = $true, ParameterSetName = 'del_gateway')]
      [Parameter(Mandatory = $true, ParameterSetName = 'set_gateway')]
      [string]$gateway,
      [Parameter(Mandatory = $true, ParameterSetName = 'set_gateway')]
      [string]$serial_number,
      [Parameter(Mandatory = $true, ParameterSetName = 'set_gateway')]
      [string]$device_key,
      [Parameter(Mandatory = $true, ParameterSetName = 'set_gateway')]
      [string]$device_type,
      [Parameter(Mandatory = $true, ParameterSetName = 'set_gateway')]
      [string]$transfer_type,
      [Parameter(Mandatory = $true, ParameterSetName = 'del_gateway')]
      [SWITCH]$del_gateway,
      $SYSTEM_ID = $Global:DD_UUID,
      $body = @{}
   )
   begin {
      $Response = @()
      $METHOD = "PUT"
   }
   process {
      $apiver = "api/v2"
      $uri = "dd-systems/$($SYSTEM_ID)/supports"
      $json = @{ operation = $PsCmdlet.ParameterSetName }
      switch ($PsCmdlet.ParameterSetName) {
         default {
         }
         'set_notification_status' {
            $json.add('notificationStatus', @{})
            if ($status) {
               $json.notificationStatus.Add("status", $status)
            }
            $json.notificationStatus.Add("notification", $notification)
            # if ($destinationAddress) {
            # $json.Add('destinationAddress', $destinationAddress)
            # }
         }

         'set_notification' {
            $json.add('notificationMethod', $notificationMethod)  
        
         }
         'set_gateway' {
            $json.add('gatewayDetails', @{})

            $json.gatewayDetails.Add("gateway", $gateway)
            $json.gatewayDetails.Add("serial_number", $serial_number)
            $json.gatewayDetails.Add("device_key", $device_key)
            $json.gatewayDetails.Add("device_type", $device_type)
            $json.gatewayDetails.Add("transfer_type", $transfer_type)
         }
         'del_gateway' {
            $json.add('gatewayDetails', @{})

            $json.gatewayDetails.Add("gateway", $gateway)

         }
      }        
      $json = $json | ConvertTo-Json   
      Write-Verbose ($json | out-string)   
      $parameters = @{
         uri           = $uri          
         apiver        = $apiver
         Method        = $METHOD
         body          = $json
         RequestMethod = "REST"
         Verbose       = $PSBoundParameters['Verbose'] -eq $true
      }      
      try {
         $Response += Invoke-DDapirequest @Parameters
      }
      catch {
         Get-DDWebException -ExceptionMessage $_
         break
      }
      write-verbose ($response | Out-String)
   }
   end {    
      switch ($PsCmdlet.ParameterSetName) {
         default {
            $response  | Select-Object   -ExcludeProperty link, links # , ddboost_options # -ExpandProperty ddboost_options
         }         
      } 
   }
}

<#
{
  "description": "Support setting inputs",
  "required": [
    "operation"
  ],
  "type": "object",
  "properties": {
    "operation": {
      "description": "An operation type for support modifications.",
      "enum": [
        "set_gateway",
        "del_gateway",
        "set_notification",
        "set_notification_status"
      ],
      "type": "string"
    },
    "notificationMethod": {
      "description": "Notification methods supported.",
      "enum": [
        "esrs",
        "email"
      ],
      "type": "string"
    },
    "gatewayDetails": {
      "description": "ESRS (Secure Remote Services) gateway settings",
      "type": "object",
      "properties": {
        "gateway": {
          "type": "string"
        },
        "serial_number": {
          "type": "string"
        },
        "device_key": {
          "type": "string"
        },
        "device_type": {
          "type": "string"
        },
        "transfer_type": {
          "type": "string"
        }
      }
    },
    "notificationStatus": {
      "description": "Support notification status input",
      "type": "object",
      "properties": {
        "notification": {
          "description": "Notification type, autosupport (and am-email), or alerts, or all.",
          "enum": [
            "autosupport",
            "alerts",
            "all"
          ],
          "type": "string"
        },
        "status": {
          "description": "Notification enabled status",
          "enum": [
            "disabled",
            "enabled"
          ],
          "type": "string"
        }
      }
    }
  }
}
#>


<#
 {
  "description": "Support setting details",
  "required": [
    "notificationMethod"
  ],
  "type": "object",
  "properties": {
    "notificationMethod": {
      "type": "string"
    },
    "esrsGateways": {
      "type": "array",
      "minItems": 0,
      "items": {
        "description": "ESRS (Secure Remote Services) gateway settings",
        "type": "object",
        "properties": {
          "gateway": {
            "type": "string"
          },
          "serial_number": {
            "type": "string"
          },
          "device_key": {
            "type": "string"
          },
          "device_type": {
            "type": "string"
          },
          "transfer_type": {
            "type": "string"
          }
        }
      }
    },
    "notificationStatus": {
      "type": "array",
      "minItems": 0,
      "items": {
        "description": "Support notification status",
        "type": "object",
        "properties": {
          "notification": {
            "description": "Notification type, autosupport (and am-email), or alerts, or all.",
            "enum": [
              "autosupport",
              "alerts",
              "all"
            ],
            "type": "string"
          },
          "status": {
            "description": "Notification enabled status",
            "enum": [
              "disabled",
              "enabled"
            ],
            "type": "string"
          },
          "destinationAddress": {
            "type": "string"
          }
        }
      }
    }
  }
}
 #>