Option Strict On
Option Explicit On

Imports System

Namespace Nexamas.UI.Rendering

    ''' <summary>
    ''' Evidence row for a material-to-frame pairing decision.
    ''' The row is planning metadata only; frame painters and renderers remain unchanged.
    ''' </summary>
    Friend NotInheritable Class MASSurfaceTreatmentFramePairingEntry

        Friend ReadOnly Property MaterialKey As String
        Friend ReadOnly Property RecommendedFrameKey As String
        Friend ReadOnly Property ThemeInfluenceMode As MASSurfaceTreatmentThemeInfluenceMode
        Friend ReadOnly Property Status As MASSurfaceTreatmentFramePairingStatus
        Friend ReadOnly Property IsCompatibilityAlias As Boolean
        Friend ReadOnly Property PreservesMaterialIdentity As Boolean
        Friend ReadOnly Property UsesOfficialSurfaceFrame As Boolean
        Friend ReadOnly Property KeepsSingleFrameStrengthModel As Boolean
        Friend ReadOnly Property DefersRuntimeFrameRepaint As Boolean
        Friend ReadOnly Property Notes As String

        Friend Sub New(materialKey As String,
                       recommendedFrameKey As String,
                       themeInfluenceMode As MASSurfaceTreatmentThemeInfluenceMode,
                       status As MASSurfaceTreatmentFramePairingStatus,
                       isCompatibilityAlias As Boolean,
                       preservesMaterialIdentity As Boolean,
                       usesOfficialSurfaceFrame As Boolean,
                       keepsSingleFrameStrengthModel As Boolean,
                       defersRuntimeFrameRepaint As Boolean,
                       notes As String)

            Me.MaterialKey = Normalize(materialKey, MASSurfaceMaterialIds.PlatformDefault)
            Me.RecommendedFrameKey = Normalize(recommendedFrameKey, MASSurfaceFrameIds.PlatformDefault)
            Me.ThemeInfluenceMode = If(themeInfluenceMode = MASSurfaceTreatmentThemeInfluenceMode.Unknown,
                                       MASSurfaceTreatmentThemeInfluenceMode.ThemeBound,
                                       themeInfluenceMode)
            Me.Status = status
            Me.IsCompatibilityAlias = isCompatibilityAlias
            Me.PreservesMaterialIdentity = preservesMaterialIdentity
            Me.UsesOfficialSurfaceFrame = usesOfficialSurfaceFrame
            Me.KeepsSingleFrameStrengthModel = keepsSingleFrameStrengthModel
            Me.DefersRuntimeFrameRepaint = defersRuntimeFrameRepaint
            Me.Notes = Normalize(notes, String.Empty)
        End Sub

        Friend ReadOnly Property IsPlannedPairing As Boolean
            Get
                Return UsesOfficialSurfaceFrame AndAlso
                       KeepsSingleFrameStrengthModel AndAlso
                       DefersRuntimeFrameRepaint AndAlso
                       Status <> MASSurfaceTreatmentFramePairingStatus.BlockedByMissingSurfaceFrameId AndAlso
                       Status <> MASSurfaceTreatmentFramePairingStatus.BlockedByParallelFrameSystem
            End Get
        End Property

        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
