Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Specialized
Imports System.Diagnostics
Imports System.IO
Imports System.Windows.Forms
Imports Nexamas.UI.Controls
Imports Nexamas.UI.Composition
Imports Nexamas.UI.FileSystem
Imports Nexamas.UI.General
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Values
Imports Nexamas.UI.Layout
Imports SkiaSharp

Namespace Nexamas.UI.Components


    Partial Public NotInheritable Class MASFilePickerControl
#Region "Size/Layout Contract"

        Friend Function GetPreferredLayoutSize(context As MASLayoutMeasureContext) As SKSize Implements IMASLayoutParticipant.GetPreferredLayoutSize
            Return MeasureIntrinsicSize(CreateSizeContext(context), SizeIntent).DesiredSize
        End Function

        Friend Function GetMinLayoutSize(context As MASLayoutMeasureContext) As SKSize Implements IMASLayoutParticipant.GetMinLayoutSize
            Return MeasureIntrinsicSize(CreateSizeContext(context), SizeIntent).MinSize
        End Function

        Friend Function MeasureIntrinsicSize(context As MASSizeContext,
                                             intent As MASSize) As MASSizeResult _
            Implements IMASIntrinsicSizeContract.MeasureIntrinsicSize

            Return MeasureFilePickerSurface(context, MASSize.Normalize(intent))
        End Function

        Private Function MeasureFloatSurface(context As MASSizeContext,
                                             availableSize As SKSize,
                                             intent As MASSize) As MASSizeResult _
            Implements IMASFloatSurfaceSizeContract.MeasureFloatSurface

            Dim safeContext As MASSizeContext = EnsureSurfaceSizeContext(context, availableSize)
            Return MeasureFilePickerSurface(safeContext, MASSize.Normalize(intent))
        End Function

        Private Shared Function MeasureFilePickerSurface(context As MASSizeContext,
                                                         intent As MASSize) As MASSizeResult
            Dim safeContext As MASSizeContext = MASIntrinsicControlSizeMetrics.EnsureContext(context)
            Return MASFloatSurfaceSizeResolver.ResolveStandardSurface(
                kind:=MASFloatSurfaceKind.FilePicker,
                context:=safeContext,
                availableSize:=safeContext.AvailableSize,
                intent:=intent)
        End Function

        Private Shared Function EnsureSurfaceSizeContext(context As MASSizeContext,
                                                        availableSize As SKSize) As MASSizeContext
            If context IsNot Nothing Then Return context
            Return New MASSizeContext(MASIntrinsicControlSizeMetrics.ResolveAvailableSize(Nothing, availableSize))
        End Function


        Private Shared Function CreateSizeContext(context As MASLayoutMeasureContext) As MASSizeContext
            If context Is Nothing Then Return New MASSizeContext(New SKSize(Single.PositiveInfinity, Single.PositiveInfinity))
            Return context.ToSizeContext()
        End Function

#End Region


    End Class

End Namespace
