functions/Remove-Ticket.ps1


function Remove-Ticket {
    <#
    .SYNOPSIS
        Deletes specified ticket or tickets.
    .DESCRIPTION
        Deletes specified ticket or tickets.
    .EXAMPLE
        PS C:\> Remove-ZendeskTicket -Id 1

        Delete ticket with id 1.
    .EXAMPLE
        PS C:\> Remove-ZendeskTicket -Id 1, 2, 3

        Delete tickets with ids 1, 2, and 3.
    .EXAMPLE
        PS C:\> Remove-ZendeskTicket -Id 1 -Permanent

        Permanently deletes deleted ticket with id 1.
    .EXAMPLE
        PS C:\> Remove-ZendeskTicket -Id 1, 2, 3 -Permanent

        Permanently deletes deleted tickets with ids 1, 2, and 3.
    .EXAMPLE
        PS C:\> Remove-ZendeskTicket -Context $context -Id 1

        Delete ticket with id 1 with connection context from `Get-ZendeskConnection`.
    #>

    [OutputType([PSCustomObject])]
    [CMDletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'High')]
    Param (
        # Unique Id of the ticket to delete
        [Parameter(Mandatory = $true)]
        [ValidateRange(1, [Int64]::MaxValue)]
        [Int64[]]
        $Id,

        # Permanently deleted a deleted ticket
        [Parameter(Mandatory = $false)]
        [Switch]
        $Permanent,

        # Zendesk Connection Context from `Get-ZendeskConnection`
        [Parameter(Mandatory = $false)]
        [PSTypeName('ZendeskContext')]
        [PSCustomObject]
        $Context = $null
    )

    if ($Id.Count -gt 1) {
        $ids = $Id -join ','

        if ($Permanent) {
            $path = "/api/v2/deleted_tickets/destroy_many?ids=$ids"
        } else {
            $path = "/api/v2/tickets/destroy_many.json?ids=$ids"
        }
    } else {
        if ($Permanent) {
            $path = "/api/v2/deleted_tickets/$Id.json"
        } else {
            $path = "/api/v2/tickets/$Id.json"
        }
    }

    if ($PSCmdlet.ShouldProcess("$Id", 'Delete Ticket')) {
        $result = Invoke-Method -Context $Context -Method 'Delete' -Path $path -Verbose:$VerbosePreference
        $result
    }

}