private/ConvertFrom-TLUserDialog.ps1


function ConvertFrom-TLUserDialog {

    [cmdletbinding()]
    Param(
        [object]$TLUserDialog
    )

    Begin {

        #Write-Verbose "[$(Get-Date)] [BEGIN] $($MyInvocation.MyCommand)"

        $Results = New-Object System.Collections.ArrayList

    }

    Process {

        ForEach ($TLDialog in ($TLUserDialog.Dialogs | Select-Object *)) {

            Switch ($TLDialog.Peer.GetType().Name) {
                'TLPeerUser'    {
                    $TLPeer = $TLUserDialog.Users.Where({$_.Id -eq $TLDialog.Peer.UserId}) | Select-Object -Last 1
                    $TLMessage = $TLUserDialog.Messages.Where({($_.FromId -eq $TLPeer.Id) -or ($_.ToId.UserId -eq $TLPeer.Id)}) | Select-Object -Last 1
                }
                'TLPeerChat'   {
                    $TLPeer = $TLUserDialog.Chats.Where({$_.Id -eq $TLDialog.Peer.ChatId}) | Select-Object -Last 1
                    $TLMessage = $TLUserDialog.Messages.Where({$_.ToId.ChatId -eq $TLPeer.Id}) | Select-Object -Last 1
                }
                'TLPeerChannel' {
                    $TLPeer = $TLUserDialog.Chats.Where({$_.Id -eq $TLDialog.Peer.ChannelId}) | Select-Object -Last 1
                    $TLMessage = $TLUserDialog.Messages.Where({$_.ToId.ChannelId -eq $TLPeer.Id}) | Select-Object -Last 1
                }
            }

            $TLDialog | Add-Member -MemberType NoteProperty -Name Peer -Value $TLPeer -Force
            $TLDialog | Add-Member -MemberType NoteProperty -Name Message -Value $TLMessage

            [void] $Results.Add($TLDialog)

        }

    }

    End {

        #Write-Verbose "[$(Get-Date)] [END ] $($MyInvocation.MyCommand)"

        Return $Results

    }

}