Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components.Governance

    Friend NotInheritable Class MASToggleSwitchReadinessManifest
        Friend Sub New(hasInteractionPolicy As Boolean,
                       hasKeyboardStateRules As Boolean,
                       hasPremiumThumbGeometry As Boolean,
                       hasOfficialThemeSurfaceRoute As Boolean,
                       hasNoPublicApiLeak As Boolean)
            Me.HasInteractionPolicy = hasInteractionPolicy
            Me.HasKeyboardStateRules = hasKeyboardStateRules
            Me.HasPremiumThumbGeometry = hasPremiumThumbGeometry
            Me.HasOfficialThemeSurfaceRoute = hasOfficialThemeSurfaceRoute
            Me.HasNoPublicApiLeak = hasNoPublicApiLeak
        End Sub

        Friend ReadOnly Property HasInteractionPolicy As Boolean
        Friend ReadOnly Property HasKeyboardStateRules As Boolean
        Friend ReadOnly Property HasPremiumThumbGeometry As Boolean
        Friend ReadOnly Property HasOfficialThemeSurfaceRoute As Boolean
        Friend ReadOnly Property HasNoPublicApiLeak As Boolean

        Friend ReadOnly Property Status As MASToggleSwitchReadinessStatus
            Get
                If Not HasInteractionPolicy Then Return MASToggleSwitchReadinessStatus.BlockedByMissingInteractionPolicy
                If Not HasKeyboardStateRules Then Return MASToggleSwitchReadinessStatus.BlockedByMissingKeyboardStateRules
                If Not HasPremiumThumbGeometry Then Return MASToggleSwitchReadinessStatus.BlockedByMissingPremiumThumbGeometry
                If Not HasOfficialThemeSurfaceRoute Then Return MASToggleSwitchReadinessStatus.BlockedByMissingOfficialThemeSurfaceRoute
                If Not HasNoPublicApiLeak Then Return MASToggleSwitchReadinessStatus.BlockedByPublicApiLeak
                Return MASToggleSwitchReadinessStatus.Ready
            End Get
        End Property

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASToggleSwitchReadinessStatus.Ready
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASToggleSwitchReadinessManifest
            Return New MASToggleSwitchReadinessManifest(
                hasInteractionPolicy:=True,
                hasKeyboardStateRules:=True,
                hasPremiumThumbGeometry:=True,
                hasOfficialThemeSurfaceRoute:=True,
                hasNoPublicApiLeak:=True)
        End Function
    End Class

End Namespace
