@using Sandbox;
@using System;
@using System.Linq;
@using System.Threading.Tasks;
@using Sandbox.Menu;
@using Sandbox.UI;

<root>
    <label class="game-title">
        @Game.Menu.Package.Title
    </label>

    <div class="controls">
        <div class="span">
            @if ( MaxPlayersSupported > 1 )
            {
                <FormGroup class="form-group">
                    <Label>Maximum Players</Label>
                    <Control>
                        <SliderControl ShowRange=@true Min=@(1f) Max=@MaxPlayersSupported Value:bind=@Game.Menu.Lobby.MaxMembers />
                    </Control>
                </FormGroup>
            }

            <FormGroup class="form-group">
                <Label>Map</Label>
                <Control>
                    <SlimPackageCard OnLaunch=@OnMapClicked Package=@MapPackage />
                </Control>
            </FormGroup>
        </div>

        <div class="spacer" />

        <a class="button" onclick=@Play>Start</a>
        <a class="button" href="/">Return</a>
    </div>
</root>

@code
{
    int MaxPlayersSupported { get; set; } = 1;
    int MaxPlayers { get; set; } = 1;
    Package MapPackage { get; set; }

    void OnMapClicked()
    {
        Game.Overlay.ShowPackageSelector( "type:map sort:popular", OnMapSelected );
        StateHasChanged();
    }

    void OnMapSelected( Package map )
    {
        MapPackage = map;
        StateHasChanged();
    }

    protected override async Task OnParametersSetAsync()
    {
        MaxPlayersSupported = Game.Menu.Package.GetMeta<int>( "MaxPlayers", 1 );
        MaxPlayers = MaxPlayersSupported;

        MapPackage = await Package.FetchAsync( "facepunch.square", false );
        StateHasChanged();
    }

    async Task Play()
    {
        await Game.Menu.StartServerAsync( MaxPlayers, $"My game", MapPackage.FullIdent );
    }

    protected override int BuildHash()
    {
        return HashCode.Combine( MaxPlayers, MapPackage );
    }
}