﻿Option Strict On
Option Explicit On

Imports System.Drawing

''' <summary>
''' Consumer-owned host sizing contract for the current Nexamas UI Showcase.
''' The active Showcase uses one PageHost window and no Form-per-page sample routes;
''' all page body layout, control sizing, and surface rhythm are consumed from Nexamas.UI.
''' </summary>
Friend NotInheritable Class ShowcaseConsumerContentContract

    Friend Const MaximumTopBarElapsedSeconds As Double = 86400.0R

    Private Sub New()
    End Sub

    Friend Shared Function ResolveWindow(kind As ShowcaseWindowSizeKind) As ShowcaseWindowSizeProfile
        ' Showcase-owned presentation decision: keep the main shell wide/landscape
        ' without changing any Nexamas.UI runtime service or control contract.
        Return New ShowcaseWindowSizeProfile(1280, 800, 1180, 680)
    End Function

    Friend Shared Function CreateInitialWindowSize(kind As ShowcaseWindowSizeKind) As Size
        Return ResolveWindow(kind).CreateInitialSize()
    End Function

    Friend Shared Function CreateMinimumWindowSize(kind As ShowcaseWindowSizeKind) As Size
        Return ResolveWindow(kind).CreateMinimumSize()
    End Function

End Class

Friend Enum ShowcaseWindowSizeKind
    Launcher
    Host
End Enum

Friend NotInheritable Class ShowcaseWindowSizeProfile
    Friend ReadOnly WidthPx As Integer
    Friend ReadOnly HeightPx As Integer
    Friend ReadOnly MinWidthPx As Integer
    Friend ReadOnly MinHeightPx As Integer

    Friend Sub New(widthPx As Integer, heightPx As Integer, minWidthPx As Integer, minHeightPx As Integer)
        Me.WidthPx = widthPx
        Me.HeightPx = heightPx
        Me.MinWidthPx = minWidthPx
        Me.MinHeightPx = minHeightPx
    End Sub

    Friend Function CreateInitialSize() As Size
        Return New Size(WidthPx, HeightPx)
    End Function

    Friend Function CreateMinimumSize() As Size
        Return New Size(MinWidthPx, MinHeightPx)
    End Function
End Class
