Option Strict On
Option Explicit On

Imports System
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports Nexamas.UI.Architecture
Imports Nexamas.UI.Composition
Imports Nexamas.UI.General
Imports Nexamas.UI.Layout
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.TextRendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Values
Imports SkiaSharp

Namespace Nexamas.UI.Controls

    Partial Public NotInheritable Class MASNotificationPanel

#Region "State / helpers"

        Private Function ResolveTitleText() As String
            Return NormalizeText(_title, NotificationPanelTokens.DefaultPanelTitle)
        End Function

        Private Function ResolveEmptyTitleText() As String
            Return NormalizeText(_emptyTitle, NotificationPanelTokens.DefaultEmptyTitle)
        End Function

        Private Function ResolveEmptyMessageText() As String
            Return NormalizeText(_emptyMessage, NotificationPanelTokens.DefaultEmptyMessage)
        End Function

        Private Function ResolveCountText() As String
            Return MASNotificationPanelContentPolicy.ResolveCountText(_items.Count, UnreadCount)
        End Function

        Private Function HitTestRow(point As SKPoint) As NotificationRowHit
            For Each hit As NotificationRowHit In _hits
                If hit.Rect.Contains(point.X, point.Y) Then Return hit
            Next
            Return Nothing
        End Function

        Friend Shared Function CreateNotificationPanelReadinessManifest() As MASNotificationPanelReadinessManifest
            Return MASNotificationPanelReadinessManifest.CreateCurrent()
        End Function

        Private Sub ValidateIndex(index As Integer)
            If index < 0 OrElse index >= _items.Count Then Throw New ArgumentOutOfRangeException(NameOf(index))
        End Sub

        Private Shared Function NormalizeText(value As String,
                                              fallback As String) As String
            Return MASNotificationPanelContentPolicy.NormalizeMessage(value, fallback)
        End Function

        Private Shared Function NormalizeTone(value As MASToastTone) As MASToastTone
            Return MASNotificationPanelContentPolicy.NormalizeTone(value)
        End Function

#End Region
    End Class

End Namespace
