@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">
            <label>Showing @Game.Menu.Lobbies.Count() @(Game.Menu.Lobbies.Count() == 1 ? "lobby" : "lobbies")</label>
            <i class="with-click" tooltip="Refresh lobbies" @onclick=@Refresh>refresh</i>
        </div>

        <div class="scroll">
            @foreach ( var lobby in Game.Menu.Lobbies )
            {
                <a class="button" @onclick=@( () => JoinLobby( lobby ) ) >@(lobby.Owner.Name)'s lobby (@lobby.MemberCount/@lobby.MaxMembers)</a>
            }
        </div>

        <div class="spacer" />

        <a class="button" @onclick=@CreateLobbyAsync>Create Lobby</a>
        <a class="button" href="/">Return</a>
    </div>
</root>

@code
{
    public async void CreateLobbyAsync()
    {
        await Game.Menu.CreateLobbyAsync( 64, "game", true );
        Game.Menu.Lobby.Map = "facepunch.square";
        this.Navigate( "/lobby/active" );
    }

    public async void JoinLobby( ILobby lobby )
    {
        if ( lobby == null ) return;

        // don't exist in two lobbies at once
        Game.Menu.Lobby?.Leave();

        await lobby.JoinAsync();
        this.Navigate( "/lobby/active" );
    }

    public async void Refresh()
    {
        await Game.Menu.QueryLobbiesAsync( null, 1 );

        StateHasChanged();
    }

    protected override int BuildHash()
    {
        return HashCode.Combine( Game.Menu.Lobbies.Count() );
    }
}