// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

#nullable disable

using System;
using osu.Framework.Graphics;
using osu.Game.Graphics.UserInterface;

namespace osu.Game.Tournament.Screens.Setup
{
    internal class ResolutionSelector : ActionableInfo
    {
        private const int minimum_window_height = 480;
        private const int maximum_window_height = 2160;

        public new Action<int> Action;

        private OsuNumberBox numberBox;

        protected override Drawable CreateComponent()
        {
            var drawable = base.CreateComponent();
            FlowContainer.Insert(-1, numberBox = new OsuNumberBox
            {
                Text = "1080",
                Width = 100
            });

            base.Action = () =>
            {
                if (string.IsNullOrEmpty(numberBox.Text))
                    return;

                // box contains text
                if (!int.TryParse(numberBox.Text, out int number))
                {
                    // at this point, the only reason we can arrive here is if the input number was too big to parse into an int
                    // so clamp to max allowed value
                    number = maximum_window_height;
                }
                else
                {
                    number = Math.Clamp(number, minimum_window_height, maximum_window_height);
                }

                // in case number got clamped, reset number in numberBox
                numberBox.Text = number.ToString();

                Action?.Invoke(number);
            };
            return drawable;
        }
    }
}