using Microsoft.Xna.Framework;

namespace Barotrauma
{
    static class LuaCsSettingsMenu
    {
        private static GUIFrame frame;

        public static void Open(RectTransform rectTransform)
        {
            Close();

            frame = new GUIFrame(new RectTransform(new Vector2(0.4f, 0.6f), rectTransform, Anchor.Center));

            GUIListBox list = new GUIListBox(new RectTransform(new Vector2(0.95f, 0.95f), frame.RectTransform, Anchor.Center), false);

            new GUITextBlock(new RectTransform(new Vector2(1f, 0.1f), list.Content.RectTransform), "LuaCs Settings", textAlignment: Alignment.Center);


            new GUITickBox(new RectTransform(new Vector2(0.8f, 0.1f), list.Content.RectTransform), "Enable CSharp Scripting")
            {
                Selected = GameMain.LuaCs.Config.EnableCsScripting,
                ToolTip = "This enables CSharp Scripting for mods to use, WARNING: CSharp is NOT sandboxed, be careful with what mods you download.",
                OnSelected = (GUITickBox tick) =>
                {
                    GameMain.LuaCs.Config.EnableCsScripting = tick.Selected;
                    GameMain.LuaCs.WriteSettings();

                    return true;
                }
            };

            new GUITickBox(new RectTransform(new Vector2(0.8f, 0.1f), list.Content.RectTransform), "Treat Forced Mods As Normal")
            {
                Selected = GameMain.LuaCs.Config.TreatForcedModsAsNormal,
                ToolTip = "This makes mods that were setup to run even when disabled to only run when enabled.",
                OnSelected = (GUITickBox tick) =>
                {
                    GameMain.LuaCs.Config.TreatForcedModsAsNormal = tick.Selected;
                    GameMain.LuaCs.WriteSettings();

                    return true;
                }
            };

            new GUITickBox(new RectTransform(new Vector2(0.8f, 0.1f), list.Content.RectTransform), "Prefer To Use Workshop Lua Setup")
            {
                Selected = GameMain.LuaCs.Config.PreferToUseWorkshopLuaSetup,
                ToolTip = "This makes Lua look first for the Lua/LuaSetup.lua located in the Workshop package instead of the one located locally.",
                OnSelected = (GUITickBox tick) =>
                {
                    GameMain.LuaCs.Config.PreferToUseWorkshopLuaSetup = tick.Selected;
                    GameMain.LuaCs.WriteSettings();

                    return true;
                }
            };

            new GUITickBox(new RectTransform(new Vector2(0.8f, 0.1f), list.Content.RectTransform), "Disable Error GUI Overlay")
            {
                Selected = GameMain.LuaCs.Config.DisableErrorGUIOverlay,
                ToolTip = "",
                OnSelected = (GUITickBox tick) =>
                {
                    GameMain.LuaCs.Config.DisableErrorGUIOverlay = tick.Selected;
                    GameMain.LuaCs.WriteSettings();

                    return true;
                }
            };

            new GUITickBox(new RectTransform(new Vector2(0.8f, 0.1f), list.Content.RectTransform), "Hide usernames In Error Logs")
            {
                Selected = GameMain.LuaCs.Config.HideUserNames,
                ToolTip = "Hides the operating system username when displaying error logs (eg your username on windows).",
                OnSelected = (GUITickBox tick) =>
                {
                    GameMain.LuaCs.Config.HideUserNames = tick.Selected;
                    GameMain.LuaCs.WriteSettings();

                    return true;
                }
            };

            new GUIButton(new RectTransform(new Vector2(1f, 0.1f), list.Content.RectTransform), $"Remove Client-Side LuaCs", style: "GUIButtonSmall")
            {
                ToolTip = "Remove Client-Side LuaCs.",
                OnClicked = (tb, userdata) =>
                {
                    LuaCsInstaller.Uninstall();
                    return true;
                }
            };

            new GUIButton(new RectTransform(new Vector2(0.8f, 0.01f), frame.RectTransform, Anchor.BottomCenter)
            {
                RelativeOffset = new Vector2(0f, 0.05f)
            }, "Close")
            {
                OnClicked = (GUIButton button, object obj) =>
                {
                    Close();

                    return true;
                }
            };
        }

        public static void Close()
        {
            frame?.Parent.RemoveChild(frame);
            frame = null;
        }
    }
}
