Option Strict On
Option Explicit On

Namespace Nexamas.UI.Certification

    ''' <summary>
    ''' Immutable coverage evidence row for one registered component descriptor.
    ''' </summary>
    Friend NotInheritable Class MASQualityComponentCoverageEntry

        Friend Sub New(componentTypeName As String,
                       componentFullName As String,
                       categoryName As String,
                       coverageKind As MASQualityComponentCoverageKind,
                       evidenceKey As String,
                       targetId As String,
                       scenarioId As String,
                       summary As String)
            Me.ComponentTypeName = Normalize(componentTypeName)
            Me.ComponentFullName = Normalize(componentFullName)
            Me.CategoryName = Normalize(categoryName)
            Me.CoverageKind = coverageKind
            Me.EvidenceKey = Normalize(evidenceKey)
            Me.TargetId = Normalize(targetId)
            Me.ScenarioId = Normalize(scenarioId)
            Me.Summary = Normalize(summary)
        End Sub

        Friend ReadOnly Property ComponentTypeName As String
        Friend ReadOnly Property ComponentFullName As String
        Friend ReadOnly Property CategoryName As String
        Friend ReadOnly Property CoverageKind As MASQualityComponentCoverageKind
        Friend ReadOnly Property EvidenceKey As String
        Friend ReadOnly Property TargetId As String
        Friend ReadOnly Property ScenarioId As String
        Friend ReadOnly Property Summary As String

        Friend ReadOnly Property HasBlockingGap As Boolean
            Get
                If CoverageKind = MASQualityComponentCoverageKind.Unclassified Then Return True
                If String.IsNullOrWhiteSpace(EvidenceKey) Then Return True
                If String.IsNullOrWhiteSpace(Summary) Then Return True
                Return False
            End Get
        End Property

        Public Overrides Function ToString() As String
            Dim targetText As String = If(String.IsNullOrWhiteSpace(TargetId), "no-target", TargetId)
            Dim scenarioText As String = If(String.IsNullOrWhiteSpace(ScenarioId), "no-scenario", ScenarioId)
            Return ComponentTypeName & " => " & CoverageKind.ToString() & " / " & EvidenceKey & " / " & targetText & " / " & scenarioText
        End Function

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

    End Class

End Namespace
