Option Strict On
Option Explicit On

Imports System.Collections.Generic

Namespace Nexamas.UI.ThemeStudio

    ''' <summary>
    ''' Product-safe description of a reusable surface material profile. A profile is a generic
    ''' slot distribution, not an element-specific material identity.
    ''' </summary>
    Friend NotInheritable Class MASSurfaceDesignerMaterialProfileEntry
        Private ReadOnly _assignments As IReadOnlyList(Of MASSurfaceDesignerMaterialProfileAssignmentEntry)

        Friend Sub New(id As String,
                       displayName As String,
                       assignments As IEnumerable(Of MASSurfaceDesignerMaterialProfileAssignmentEntry),
                       notes As String)
            Me.Id = Normalize(id)
            Me.DisplayName = Normalize(displayName)
            _assignments = CopyAssignments(assignments)
            Me.Notes = Normalize(notes)
        End Sub

        Friend ReadOnly Property Id As String
        Friend ReadOnly Property DisplayName As String
        Friend ReadOnly Property Assignments As IReadOnlyList(Of MASSurfaceDesignerMaterialProfileAssignmentEntry)
            Get
                Return _assignments
            End Get
        End Property

        Friend ReadOnly Property Notes As String

        Friend ReadOnly Property AssignmentCount As Integer
            Get
                Return Assignments.Count
            End Get
        End Property

        Friend ReadOnly Property HasNativeAssignments As Boolean
            Get
                For Each assignment As MASSurfaceDesignerMaterialProfileAssignmentEntry In Assignments
                    If assignment IsNot Nothing AndAlso assignment.IsNativeMaterial Then Return True
                Next
                Return False
            End Get
        End Property

        Friend ReadOnly Property HasThemeAwareAssignments As Boolean
            Get
                For Each assignment As MASSurfaceDesignerMaterialProfileAssignmentEntry In Assignments
                    If assignment IsNot Nothing AndAlso assignment.IsThemeAware Then Return True
                Next
                Return False
            End Get
        End Property

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

        Private Shared Function CopyAssignments(items As IEnumerable(Of MASSurfaceDesignerMaterialProfileAssignmentEntry)) As IReadOnlyList(Of MASSurfaceDesignerMaterialProfileAssignmentEntry)
            Dim list As New List(Of MASSurfaceDesignerMaterialProfileAssignmentEntry)()
            If items IsNot Nothing Then list.AddRange(items)
            Return list.AsReadOnly()
        End Function

    End Class

End Namespace
