Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.Rendering

Namespace Nexamas.UI.Verification

    ''' <summary>
    ''' One internal Render Verification proof row for a VisualSurface runtime surface visual consumer.
    ''' </summary>
    ''' <remarks>
    ''' The row records catalog/registry/route-alignment only. It does not allocate bitmaps, draw, create controls,
    ''' run baselines, expose diagnostics, or open public proof API.
    ''' </remarks>
    Friend NotInheritable Class MASRenderVerificationSurfaceMaterialProofEntry
        Friend Sub New(consumerKind As MASSurfaceTreatmentConsumerKind,
                       consumerDisplayName As String,
                       scenarioId As String,
                       componentKey As String,
                       stateKey As String,
                       materialKey As String,
                       publicGatewayMemberCount As Integer,
                       hasRuntimeSurfaceVisualConsumer As Boolean,
                       hasPublicSurfaceGateway As Boolean,
                       hasCatalogScenario As Boolean,
                       hasRegisteredCaptureScene As Boolean,
                       hasExplicitMaterialResolution As Boolean)
            Me.ConsumerKind = consumerKind
            Me.ConsumerDisplayName = Normalize(consumerDisplayName)
            Me.ScenarioId = Normalize(scenarioId)
            Me.ComponentKey = Normalize(componentKey)
            Me.StateKey = Normalize(stateKey)
            Me.MaterialKey = Normalize(materialKey)
            Me.PublicGatewayMemberCount = Math.Max(0, publicGatewayMemberCount)
            Me.HasRuntimeSurfaceVisualConsumer = hasRuntimeSurfaceVisualConsumer
            Me.HasPublicSurfaceGateway = hasPublicSurfaceGateway
            Me.HasCatalogScenario = hasCatalogScenario
            Me.HasRegisteredCaptureScene = hasRegisteredCaptureScene
            Me.HasExplicitMaterialResolution = hasExplicitMaterialResolution
        End Sub

        Friend ReadOnly Property ConsumerKind As MASSurfaceTreatmentConsumerKind
        Friend ReadOnly Property ConsumerDisplayName As String
        Friend ReadOnly Property ScenarioId As String
        Friend ReadOnly Property ComponentKey As String
        Friend ReadOnly Property StateKey As String
        Friend ReadOnly Property MaterialKey As String
        Friend ReadOnly Property PublicGatewayMemberCount As Integer
        Friend ReadOnly Property HasRuntimeSurfaceVisualConsumer As Boolean
        Friend ReadOnly Property HasPublicSurfaceGateway As Boolean
        Friend ReadOnly Property HasCatalogScenario As Boolean
        Friend ReadOnly Property HasRegisteredCaptureScene As Boolean
        Friend ReadOnly Property HasExplicitMaterialResolution As Boolean

        Friend ReadOnly Property HasPublicGatewayMembers As Boolean
            Get
                Return PublicGatewayMemberCount > 0
            End Get
        End Property

        Friend ReadOnly Property HasCurrentRenderVerificationProof As Boolean
            Get
                Return HasRuntimeSurfaceVisualConsumer AndAlso
                       HasCatalogScenario AndAlso
                       HasRegisteredCaptureScene AndAlso
                       HasExplicitMaterialResolution AndAlso
                       ScenarioId.Length > 0 AndAlso
                       ComponentKey.Length > 0 AndAlso
                       StateKey.Length > 0 AndAlso
                       MaterialKey.Length > 0
            End Get
        End Property

        Friend ReadOnly Property HasPublicGatewayRouteMappingProof As Boolean
            Get
                Return HasCurrentRenderVerificationProof AndAlso
                       HasPublicSurfaceGateway AndAlso
                       HasPublicGatewayMembers
            End Get
        End Property

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

End Namespace
