Option Strict On
Option Explicit On

Imports System
Imports System.ComponentModel
Imports System.Globalization
Imports Nexamas.UI.Architecture
Imports Nexamas.UI.Components
Imports Nexamas.UI.Composition
Imports Nexamas.UI.General
Imports Nexamas.UI.Layout
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Values
Imports SkiaSharp

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' A single official MAS operation progress composition.
    ''' It owns a themed PlatformDefault surface container and internally arranges a title MASLabel,
    ''' one MASProgressBar, and a status MASLabel. Callers update the operation state through
    ''' this control rather than manually building panel + label + progress layouts in forms.
    ''' </summary>
    Partial Public NotInheritable Class MASOperationProgressBox
        Inherits MASControlBase
        Implements IMASLayoutParticipant
        Implements IMASIntrinsicSizeContract

#Region "Fields"

        Private Shared ReadOnly _contract As MASResolvedComponentContract =
            MASArchitectureRuntime.ResolveContractOrThrow(GetType(MASOperationProgressBox))

        Private Shared ReadOnly _progressContract As MASResolvedComponentContract =
            MASArchitectureRuntime.ResolveContractOrThrow(GetType(MASProgressBar))

        Private ReadOnly _renderer As New MASOperationProgressBoxRenderer()

        Private ReadOnly _titleLabel As MASLabel
        Private ReadOnly _statusLabel As MASLabel
        Private ReadOnly _progressBar As MASProgressBar
        Private ReadOnly _percentLabel As MASLabel

        Private _titleText As String = MASOperationProgressBoxPolicy.DefaultTitleText
        Private _statusText As String = MASOperationProgressBoxPolicy.DefaultStatusText

        Private _minimum As Double = 0.0R
        Private _maximum As Double = 100.0R
        Private _value As Double = 0.0R
        Private _visualState As MASProgressBarState = MASProgressBarState.Normal

        Private _containerSurfaceMaterialKey As String = MASSurfaceMaterialIds.PlatformDefault
        Private _containerBorderStrength As MASSurfaceStrength = MASSurfaceStrength.ThemeDefault
        Private _containerSurfaceStrength As MASSurfaceStrength = MASSurfaceStrength.ThemeDefault

#End Region

        Public Event ValueChanged As EventHandler

        Public Sub New()
            MyBase.New()

            _titleLabel = CreateTitleLabel(_titleText)
            _statusLabel = CreateStatusLabel(_statusText)
            _percentLabel = CreatePercentLabel()
            _progressBar = CreateInnerProgressBar(_percentLabel)

            RegisterChild(_titleLabel)
            RegisterChild(_progressBar)
            RegisterChild(_statusLabel)

            UpdatePercentText()
            ArrangeChildren()
        End Sub

        Public Sub New(titleText As String)
            Me.New()
            Me.TitleText = titleText
        End Sub

        Public Sub New(titleText As String, statusText As String)
            Me.New(titleText)
            Me.StatusText = statusText
        End Sub

    End Class

End Namespace
