using GraphicsManager.Enums;
using GraphicsManager.Objects;
using Luski.Classes;
using Luski.GUI.MainScreen.UI.LuskiControls;
using Luski.GUI.MainScreen.UI.LuskiSettings.Core;
using Luski.GUI.MainScreen.UI.SettingsPanel;
using OpenTK.Mathematics;

namespace Luski.GUI.MainScreen.UI.LuskiSettings.Pages.AppSettings;

public class Appearance : PageFlow
{
    private DropDown<ThemeDropButton> ThemeDrop;
    
    public Appearance()
    {
        PageName = "Appearance";
        ThemeDropButton LightDD;
        ThemeDrop = new(Globals.ms.TextureManager.GetTextureResource("RoundedRectangle.png"),new Rectangle()
        {
            Size = new(base.Size.X - 2, 1.ScaleInt()),
            BackgroundColor = Color4.Gray,
            Location = new(1, base.Size.Y - 1.ScaleInt(), 0),
            Anchor = ObjectAnchor.Left | ObjectAnchor.Right | ObjectAnchor.Bottom
        }, LightDD = new(LuskiThemes.Light)
        {
            LoadDisplay = () =>
            {
                Label ll = new Label(Globals.DefaultFont)
                {
                    Text = LuskiThemes.Light.Name,
                    Color = Color4.DarkGray,
                    IgnoreHover = true
                };
                ll.Location = new(10.ScaleInt(),
                    ((ThemeDrop.Size.Y - ll.Size.Y) / 2)
                    , 0);
                ThemeDrop.Controls.Add(ll);
            },
            Size = new(297.ScaleInt(), 40.ScaleInt()),
        })
        {
            DropDownParentOverride = Globals.ms,
            Size = new(40.ScaleInt()),
            Location = new(5.ScaleInt(), 5.ScaleInt(), 0),
            BackgroundColor = new(40, 40, 40, 255),
            Anchor = ObjectAnchor.Right | ObjectAnchor.Left,};
        foreach (ThemeStart themeStart in LuskiThemes.LuskiThemeList)
        {
            if (themeStart.Name == LuskiThemes.Light.Name) continue;
            ThemeDropButton tdb;
            ThemeDrop.AddOption(tdb = new(themeStart)
            {
                LoadDisplay = () =>
                {
                    Label ll = new Label(Globals.DefaultFont)
                    {
                        Text = themeStart.Name,
                        Color = Color4.DarkGray,
                        IgnoreHover = true
                    };
                    ll.Location = new(10.ScaleInt(),
                        ((ThemeDrop.Size.Y - ll.Size.Y) / 2)
                        , 0);
                    ThemeDrop.Controls.Add(ll);
                },
                Size = new(297.ScaleInt(), 40.ScaleInt()),
            });
            if (themeStart.Name == Globals.Settings.Theme) ThemeDrop.SetSelected(tdb);
        }
        ThemeDrop.DropDownContainer.Textures.Add(Globals.ms.TextureManager.GetTextureResource("RoundedRectangleBottom.png"));
        ThemeDrop.DropDownContainer.TextureDisplay = TextureDisplay.Center;
        ThemeDrop.DropDownContainer.Shader = Rectangle.DefaultAlphaShader[Globals.ms.Context];
        ThemeDrop.DropDownContainer.BackgroundColor = ThemeDrop.BackgroundColor;
        Rectangle line = new()
        {
            Size = new(base.Size.X - 2, 1.ScaleInt()),
            BackgroundColor = Color4.Gray,
            Location = new(1, base.Size.Y - 1.ScaleInt(), 0),
            Anchor = ObjectAnchor.Left | ObjectAnchor.Right | ObjectAnchor.Bottom
        };
        ThemeDrop.OpenStatusChanged += b =>
        {
            BlockDraw = true;
            Size = new(base.Size.X, base.Size.Y + ( b ? ThemeDrop.DropDownContainer.Size.Y : -1 * ThemeDrop.DropDownContainer.Size.Y));
            line!.Location = new(line.Location.X,
                line.Location.Y + (b ? ThemeDrop.DropDownContainer.Size.Y : -1 * ThemeDrop.DropDownContainer.Size.Y), 0);
            if (b)
            {
                ThemeDrop.Textures[0] = Globals.ms.TextureManager.GetTextureResource("RoundedRectangleTop.png");
            }
            else
            {
                ThemeDrop.Textures[0] = Globals.ms.TextureManager.GetTextureResource("RoundedRectangle.png");
            }

            BlockDraw = false;
            return Task.CompletedTask;
        };
        Controls.Add(ThemeDrop);
    }
}