Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components

    Friend NotInheritable Class MessageBoxResultResolver

        Private Sub New()
        End Sub

        Friend Shared Function Resolve(request As MessageBoxRequest,
                                       spec As MASButtonSpec,
                                       buttonIndex As Integer) As MessageBoxResult

            If request IsNot Nothing AndAlso
               request.ButtonResults IsNot Nothing AndAlso
               buttonIndex >= 0 AndAlso
               buttonIndex < request.ButtonResults.Count Then

                Dim mapped As MessageBoxResult = request.ButtonResults(buttonIndex)

                If mapped <> MessageBoxResult.None Then
                    Return mapped
                End If
            End If

            If spec Is Nothing Then
                Return MessageBoxResult.None
            End If

            Dim text As String =
                If(spec.Text, String.Empty).Trim().ToUpperInvariant()

            Select Case text
                Case "OK"
                    Return MessageBoxResult.OK

                Case "ACCEPT"
                    Return MessageBoxResult.OK

                Case "CANCEL"
                    Return MessageBoxResult.Cancel

                Case "YES"
                    Return MessageBoxResult.Yes

                Case "NO"
                    Return MessageBoxResult.No

                Case "RETRY"
                    Return MessageBoxResult.Retry

                Case "ABORT"
                    Return MessageBoxResult.Abort

                Case "IGNORE"
                    Return MessageBoxResult.Ignore

                Case "CLOSE"
                    Return MessageBoxResult.Close

                Case "DELETE"
                    Return MessageBoxResult.OK
            End Select

            If spec.IsDefault Then
                Return MessageBoxResult.OK
            End If

            If buttonIndex = 0 Then
                Return MessageBoxResult.OK
            End If

            Return MessageBoxResult.None

        End Function

    End Class

End Namespace