using Content.Client.Chat;
using Robust.Client.Graphics.Drawing;
using Robust.Client.Interfaces.ResourceManagement;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Localization;
using Robust.Shared.Maths;

namespace Content.Client.UserInterface
{
    internal sealed class LobbyGui : PanelContainer
    {
        public Label ServerName { get; }
        public Label StartTime { get; }
        public Button ReadyButton { get; }
        public Button ObserveButton { get; }
        public Button LeaveButton { get; }
        public ChatBox Chat { get; }
        public ItemList OnlinePlayerItemList { get; }

        public LobbyGui(ILocalizationManager localization, IResourceCache resourceCache)
        {
            PanelOverride = new StyleBoxFlat {BackgroundColor = new Color(37, 37, 45)};
            PanelOverride.SetContentMarginOverride(StyleBox.Margin.All, 4);

            var vBox = new VBoxContainer();
            AddChild(vBox);

            {
                // Title bar.
                var titleContainer = new HBoxContainer();
                vBox.AddChild(titleContainer);

                var lobbyTitle = new Label
                {
                    Text = localization.GetString("Lobby"),
                    SizeFlagsHorizontal = SizeFlags.None
                };
                lobbyTitle.AddStyleClass(NanoStyle.StyleClassLabelHeading);
                titleContainer.AddChild(lobbyTitle);

                titleContainer.AddChild(ServerName = new Label
                {
                    SizeFlagsHorizontal = SizeFlags.ShrinkCenter | SizeFlags.Expand
                });
                ServerName.AddStyleClass(NanoStyle.StyleClassLabelHeading);

                titleContainer.AddChild(LeaveButton = new Button
                {
                    SizeFlagsHorizontal = SizeFlags.ShrinkEnd,
                    Text = localization.GetString("Leave")
                });
                LeaveButton.AddStyleClass(NanoStyle.StyleClassButtonBig);
            }

            var hBox = new HBoxContainer {SizeFlagsVertical = SizeFlags.FillExpand};
            vBox.AddChild(hBox);

            {
                var leftVBox = new VBoxContainer {SizeFlagsHorizontal = SizeFlags.FillExpand};
                hBox.AddChild(leftVBox);

                leftVBox.AddChild(new Placeholder(resourceCache)
                {
                    SizeFlagsVertical = SizeFlags.FillExpand,
                    PlaceholderText = localization.GetString("Character UI\nPlaceholder")
                });

                var readyButtons = new HBoxContainer();

                leftVBox.AddChild(readyButtons);
                readyButtons.AddChild(ObserveButton = new Button
                {
                    Text = localization.GetString("Observe")
                });
                ObserveButton.AddStyleClass(NanoStyle.StyleClassButtonBig);

                readyButtons.AddChild(StartTime = new Label
                {
                    SizeFlagsHorizontal = SizeFlags.FillExpand,
                    Align = Label.AlignMode.Right
                });

                readyButtons.AddChild(ReadyButton = new Button
                {
                    ToggleMode = true,
                    Text = localization.GetString("Ready Up")
                });
                ReadyButton.AddStyleClass(NanoStyle.StyleClassButtonBig);

                leftVBox.AddChild(Chat = new ChatBox {SizeFlagsVertical = SizeFlags.FillExpand});
                Chat.Input.PlaceHolder = localization.GetString("Talk!");
            }

            {
                var rightVBox = new VBoxContainer {SizeFlagsHorizontal = SizeFlags.FillExpand};
                hBox.AddChild(rightVBox);
                rightVBox.AddChild(new Label
                {
                    Text = localization.GetString("Online Players:")
                });
                rightVBox.AddChild(OnlinePlayerItemList = new ItemList
                {
                    SizeFlagsVertical = SizeFlags.FillExpand,
                    //SelectMode = ItemList.ItemListSelectMode.None
                });
                rightVBox.AddChild(new Placeholder(resourceCache)
                {
                    SizeFlagsVertical = SizeFlags.FillExpand,
                    PlaceholderText = localization.GetString("Server Info\nPlaceholder")
                });
            }
        }
    }
}
