Option Strict On
Option Explicit On

Imports Nexamas.UI.Certification

Namespace Nexamas.UI.Verification

    ''' <summary>
    ''' One descriptor-level Render Verification dashboard row built from existing Quality evidence.
    ''' </summary>
    Friend NotInheritable Class MASRenderVerificationElementCoverageEntry

        Friend Sub New(componentTypeName As String,
                       componentFullName As String,
                       categoryName As String,
                       coverageKind As MASQualityComponentCoverageKind,
                       evidenceKey As String,
                       targetId As String,
                       scenarioId As String,
                       state As MASRenderVerificationElementCoverageState,
                       evidenceRouteText As String,
                       snapshotEntry As MASRenderVerificationEntry,
                       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.State = state
            Me.EvidenceRouteText = Normalize(evidenceRouteText)
            Me.SnapshotEntry = snapshotEntry
            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 State As MASRenderVerificationElementCoverageState
        Friend ReadOnly Property EvidenceRouteText As String
        Friend ReadOnly Property SnapshotEntry As MASRenderVerificationEntry
        Friend ReadOnly Property Summary As String

        Friend ReadOnly Property HasVisualPreview As Boolean
            Get
                Return SnapshotEntry IsNot Nothing
            End Get
        End Property

        Friend ReadOnly Property StateText As String
            Get
                Select Case State
                    Case MASRenderVerificationElementCoverageState.Matched
                        Return "Matched"
                    Case MASRenderVerificationElementCoverageState.VisualReview
                        Return "Review"
                    Case MASRenderVerificationElementCoverageState.Changed
                        Return "Changed"
                    Case MASRenderVerificationElementCoverageState.Invalid
                        Return "Invalid"
                    Case MASRenderVerificationElementCoverageState.MissingSnapshot
                        Return "Missing snapshot"
                    Case MASRenderVerificationElementCoverageState.ContractProof
                        Return "Contract proof"
                    Case Else
                        Return "Unclassified"
                End Select
            End Get
        End Property

        Friend ReadOnly Property IsBlocking As Boolean
            Get
                Return State = MASRenderVerificationElementCoverageState.Unclassified OrElse
                       State = MASRenderVerificationElementCoverageState.MissingSnapshot OrElse
                       State = MASRenderVerificationElementCoverageState.Invalid
            End Get
        End Property

        Public Overrides Function ToString() As String
            Return ComponentTypeName & " | " & CoverageKind.ToString() & " | " & StateText & " | " & EvidenceRouteText
        End Function

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

    End Class

End Namespace
