using System;
using OpenTK;
using OpenTK.Graphics;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites;

namespace osu.Game.Overlays.Options
{
    public abstract class OptionsSection : Container
    {
        protected FlowContainer content;
        protected override Container<Drawable> Content => content;

        protected abstract string Header { get; }

        public OptionsSection()
        {
            const int headerSize = 30, headerMargin = 25;
            const int borderSize = 2;
            AutoSizeAxes = Axes.Y;
            RelativeSizeAxes = Axes.X;
            AddInternal(new Drawable[]
            {
                new Box
                {
                    Colour = new Color4(3, 3, 3, 255),
                    RelativeSizeAxes = Axes.X,
                    Height = borderSize,
                },
                new Container
                {
                    Padding = new MarginPadding
                    {
                        Top = 10 + borderSize,
                        Left = OptionsOverlay.SideMargins,
                        Right = OptionsOverlay.SideMargins,
                        Bottom = 10,
                    },
                    RelativeSizeAxes = Axes.X,
                    AutoSizeAxes = Axes.Y,
                    Children = new[]
                    {
                        new SpriteText
                        {
                            TextSize = headerSize,
                            Colour = new Color4(247, 198, 35, 255),
                            Text = Header,
                        },
                        content = new FlowContainer
                        {
                            Margin = new MarginPadding { Top = headerSize + headerMargin },
                            Direction = FlowDirection.VerticalOnly,
                            Spacing = new Vector2(0, 25),
                            AutoSizeAxes = Axes.Y,
                            RelativeSizeAxes = Axes.X,
                        },
                    }
                },
            });
        }
    }
}