Option Strict On
Option Explicit On

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

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Public layout contract that decides where an imported MASLabel is placed relative to MASProgressBar.
    ''' The progress bar never creates a native label; callers may attach a normal MASLabel instance and let this
    ''' control arrange it as part of the progress component.
    ''' </summary>
    Public Enum MASProgressBarLabelPlacement
        None = 0
        Top = 1
        Bottom = 2
        Left = 3
        Right = 4
        InsideCenter = 5
    End Enum

    ''' <summary>
    ''' Advanced progress-track recommendation presets. The official element-size API is MASSize
    ''' through WithSize/WithDefaultSize/WithCompactSize/WithLargeSize; these presets only preserve
    ''' the progress renderer's historical recommended-bounds helpers and are Default-derived.
    ''' </summary>
    <Global.System.ComponentModel.EditorBrowsable(Global.System.ComponentModel.EditorBrowsableState.Advanced)>
    Friend Enum MASProgressBarSize
        Compact = 0
        [Default] = 1
        Large = 2
        Jumbo = 3
    End Enum

    ''' <summary>
    ''' Public frame contract for MASProgressBar.
    ''' None preserves the raw track-only renderer. ContainedField remains available for callers that explicitly
    ''' want the progress renderer to draw a themed container surface around the track.
    ''' </summary>
    Public Enum MASProgressBarFrameMode
        None = 0
        ContainedField = 1
    End Enum

    ''' <summary>
    ''' MAS progress bar with optional MASLabel composition support.
    ''' The control owns progress rendering, while any text remains a real MASLabel child control supplied by the caller.
    ''' </summary>
    Partial Public NotInheritable Class MASProgressBar
        Inherits MASControlBase
        Implements IMASLayoutParticipant
        Implements IMASIntrinsicSizeContract

#Region "Fields"

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

        Private ReadOnly _renderer As ProgressBarRenderer

        Private _minimum As Double = 0.0R
        Private _maximum As Double = 100.0R
        Private _value As Double = 0.0R
        Private _visualValue As Double = 0.0R
        Private _hasVisualValueOverride As Boolean
        Private _valueMotionRunner As MASMotionTimelineRunner
        Private _visualState As MASProgressBarState = MASProgressBarState.Normal

        Private _label As MASLabel
        Private _labelPlacement As MASProgressBarLabelPlacement = MASProgressBarLabelPlacement.None
        Private _labelGap As Single = ProgressBarTokens.LabelGap
        Private _labelExtent As Single = 0.0F
        Private _autoArrangeLabelAlignment As Boolean = True
        Private _sizeMode As MASProgressBarSize = MASProgressBarSize.[Default]
        Private _frameMode As MASProgressBarFrameMode = MASProgressBarFrameMode.None
        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()
            _renderer = New ProgressBarRenderer()
        End Sub


    End Class

End Namespace
