Option Strict On
Option Explicit On

Namespace Nexamas.UI.Rendering

    ''' <summary>
    ''' One current visual-surface consumer recorded by the treatment inventory.
    ''' This object is evidence only: it does not draw, resolve layout, or change state.
    ''' </summary>
    Friend NotInheritable Class MASSurfaceTreatmentInventoryEntry

        Friend ReadOnly Property ConsumerKind As MASSurfaceTreatmentConsumerKind
        Friend ReadOnly Property ConsumerName As String
        Friend ReadOnly Property ArchitectureMaterialRoleName As String
        Friend ReadOnly Property CurrentMaterialSource As String
        Friend ReadOnly Property CurrentFrameSource As String
        Friend ReadOnly Property CurrentFrameStrengthSource As String
        Friend ReadOnly Property DefaultMaterialKey As String
        Friend ReadOnly Property DefaultFrameKey As String
        Friend ReadOnly Property ThemeInfluenceMode As MASSurfaceTreatmentThemeInfluenceMode
        Friend ReadOnly Property Status As MASSurfaceTreatmentOwnershipStatus
        Friend ReadOnly Property ConsumesVisualSurface As Boolean
        Friend ReadOnly Property RequiresCapturedMaterial As Boolean
        Friend ReadOnly Property RequiresMaterialFramePairing As Boolean
        Friend ReadOnly Property PreservesCurrentVisualShape As Boolean
        Friend ReadOnly Property Notes As String

        Friend Sub New(consumerKind As MASSurfaceTreatmentConsumerKind,
                       consumerName As String,
                       architectureMaterialRoleName As String,
                       currentMaterialSource As String,
                       currentFrameSource As String,
                       currentFrameStrengthSource As String,
                       defaultMaterialKey As String,
                       defaultFrameKey As String,
                       themeInfluenceMode As MASSurfaceTreatmentThemeInfluenceMode,
                       status As MASSurfaceTreatmentOwnershipStatus,
                       consumesVisualSurface As Boolean,
                       requiresCapturedMaterial As Boolean,
                       requiresMaterialFramePairing As Boolean,
                       preservesCurrentVisualShape As Boolean,
                       notes As String)

            Me.ConsumerKind = consumerKind
            Me.ConsumerName = Normalize(consumerName, consumerKind.ToString())
            Me.ArchitectureMaterialRoleName = Normalize(architectureMaterialRoleName, "None")
            Me.CurrentMaterialSource = Normalize(currentMaterialSource, "Unknown")
            Me.CurrentFrameSource = Normalize(currentFrameSource, "Unknown")
            Me.CurrentFrameStrengthSource = Normalize(currentFrameStrengthSource, "Unknown")
            Me.DefaultMaterialKey = Normalize(defaultMaterialKey, MASSurfaceMaterialIds.Auto)
            Me.DefaultFrameKey = Normalize(defaultFrameKey, MASSurfaceFrameIds.PlatformDefault)
            Me.ThemeInfluenceMode = themeInfluenceMode
            Me.Status = status
            Me.ConsumesVisualSurface = consumesVisualSurface
            Me.RequiresCapturedMaterial = requiresCapturedMaterial
            Me.RequiresMaterialFramePairing = requiresMaterialFramePairing
            Me.PreservesCurrentVisualShape = preservesCurrentVisualShape
            Me.Notes = Normalize(notes, String.Empty)
        End Sub

        Private Shared Function Normalize(value As String, fallback As String) As String
            Dim result As String = If(value, String.Empty).Trim()
            If result.Length = 0 Then Return fallback
            Return result
        End Function

    End Class

End Namespace
