Option Strict On
Option Explicit On

Namespace Nexamas.UI.Visualization

    ''' <summary>
    ''' Immutable chart primitive generated by the foundation render-plan builder.
    ''' </summary>
    Friend NotInheritable Class MASChartVisualPrimitive

        Friend Sub New(kind As MASChartVisualPrimitiveKind,
                       seriesKey As String,
                       categoryKey As String,
                       label As String,
                       value As Double,
                       x As Double,
                       y As Double,
                       width As Double,
                       height As Double,
                       x2 As Double,
                       y2 As Double,
                       startAngleDegrees As Double,
                       sweepAngleDegrees As Double,
                       innerRadius As Double,
                       outerRadius As Double,
                       isPrimary As Boolean)
            Me.Kind = kind
            Me.SeriesKey = MASChartDataPoint.NormalizeText(seriesKey)
            Me.CategoryKey = MASChartDataPoint.NormalizeText(categoryKey)
            Me.Label = MASChartDataPoint.NormalizeText(label)
            Me.Value = value
            Me.X = x
            Me.Y = y
            Me.Width = width
            Me.Height = height
            Me.X2 = x2
            Me.Y2 = y2
            Me.StartAngleDegrees = startAngleDegrees
            Me.SweepAngleDegrees = sweepAngleDegrees
            Me.InnerRadius = innerRadius
            Me.OuterRadius = outerRadius
            Me.IsPrimary = isPrimary
        End Sub

        Friend ReadOnly Property Kind As MASChartVisualPrimitiveKind
        Friend ReadOnly Property SeriesKey As String
        Friend ReadOnly Property CategoryKey As String
        Friend ReadOnly Property Label As String
        Friend ReadOnly Property Value As Double
        Friend ReadOnly Property X As Double
        Friend ReadOnly Property Y As Double
        Friend ReadOnly Property Width As Double
        Friend ReadOnly Property Height As Double
        Friend ReadOnly Property X2 As Double
        Friend ReadOnly Property Y2 As Double
        Friend ReadOnly Property StartAngleDegrees As Double
        Friend ReadOnly Property SweepAngleDegrees As Double
        Friend ReadOnly Property InnerRadius As Double
        Friend ReadOnly Property OuterRadius As Double
        Friend ReadOnly Property IsPrimary As Boolean

        Friend ReadOnly Property IsValid As Boolean
            Get
                Return Kind <> MASChartVisualPrimitiveKind.Unknown AndAlso
                       MASChartDataPoint.IsFinite(Value) AndAlso
                       MASChartDataPoint.IsFinite(X) AndAlso
                       MASChartDataPoint.IsFinite(Y) AndAlso
                       MASChartDataPoint.IsFinite(Width) AndAlso
                       MASChartDataPoint.IsFinite(Height) AndAlso
                       MASChartDataPoint.IsFinite(X2) AndAlso
                       MASChartDataPoint.IsFinite(Y2) AndAlso
                       MASChartDataPoint.IsFinite(StartAngleDegrees) AndAlso
                       MASChartDataPoint.IsFinite(SweepAngleDegrees) AndAlso
                       MASChartDataPoint.IsFinite(InnerRadius) AndAlso
                       MASChartDataPoint.IsFinite(OuterRadius)
            End Get
        End Property

    End Class

End Namespace
