Option Strict On
Option Explicit On

Imports System

Namespace Nexamas.UI.Rendering

    ''' <summary>
    ''' Internal evidence row for one approved public surface-material gateway member.
    ''' It records public API truth only; it does not resolve materials, draw, create controls, or expose registries.
    ''' </summary>
    Friend NotInheritable Class MASPublicSurfaceMaterialGatewayEntry
        Friend ReadOnly Property OwnerTypeName As String
        Friend ReadOnly Property MemberName As String
        Friend ReadOnly Property MemberKind As String
        Friend ReadOnly Property PublicSignature As String
        Friend ReadOnly Property ConsumerKind As MASSurfaceTreatmentConsumerKind
        Friend ReadOnly Property PreservesAutoDefaultPath As Boolean
        Friend ReadOnly Property UsesStringMaterialKey As Boolean
        Friend ReadOnly Property HasCurrentRenderVerificationProof As Boolean
        Friend ReadOnly Property Notes As String

        Friend Sub New(ownerTypeName As String,
                       memberName As String,
                       memberKind As String,
                       publicSignature As String,
                       consumerKind As MASSurfaceTreatmentConsumerKind,
                       preservesAutoDefaultPath As Boolean,
                       usesStringMaterialKey As Boolean,
                       hasCurrentRenderVerificationProof As Boolean,
                       notes As String)
            Me.OwnerTypeName = Normalize(ownerTypeName)
            Me.MemberName = Normalize(memberName)
            Me.MemberKind = Normalize(memberKind)
            Me.PublicSignature = Normalize(publicSignature)
            Me.ConsumerKind = consumerKind
            Me.PreservesAutoDefaultPath = preservesAutoDefaultPath
            Me.UsesStringMaterialKey = usesStringMaterialKey
            Me.HasCurrentRenderVerificationProof = hasCurrentRenderVerificationProof
            Me.Notes = Normalize(notes)
        End Sub

        Friend ReadOnly Property IsPublicSurfaceMaterialGateway As Boolean
            Get
                Return OwnerTypeName.Length > 0 AndAlso
                       MemberName.Length > 0 AndAlso
                       MemberKind.Length > 0 AndAlso
                       PublicSignature.Length > 0 AndAlso
                       MASSurfaceTreatmentConsumerCatalog.IsRuntimeSurfaceVisualConsumer(ConsumerKind) AndAlso
                       MASSurfaceTreatmentConsumerCatalog.IsPublicSurfaceGateway(ConsumerKind) AndAlso
                       PreservesAutoDefaultPath AndAlso
                       UsesStringMaterialKey
            End Get
        End Property

        Friend Function Matches(ownerTypeName As String,
                                memberName As String) As Boolean
            Return String.Equals(Me.OwnerTypeName, Normalize(ownerTypeName), StringComparison.Ordinal) AndAlso
                   String.Equals(Me.MemberName, Normalize(memberName), StringComparison.Ordinal)
        End Function

        Private Shared Function Normalize(value As String) As String
            Return If(value, String.Empty).Trim()
        End Function
    End Class

End Namespace
