using HSUI.Config;
using HSUI.Config.Attributes;
using HSUI.Enums;
using System.Numerics;

namespace HSUI.Interface.GeneralElements
{
    [DisableParentSettings("Position")]
    [Section("Other Elements")]
    [SubSection("Mouse GCD Indicator", 0)]
    public class MouseGCDIndicatorConfig : MovablePluginConfigObject
    {
        [Checkbox("Always Show")]
        [Order(3)]
        public bool AlwaysShow = false;

        [ColorEdit4("Background Color")]
        [Order(16)]
        public PluginConfigColor BackgroundColor = new PluginConfigColor(new Vector4(0f / 255f, 0f / 255f, 0f / 255f, 50f / 100f));

        [ColorEdit4("Color")]
        [Order(17)]
        public PluginConfigColor FillColor = new PluginConfigColor(new(220f / 255f, 220f / 255f, 220f / 255f, 100f / 100f));

        [Checkbox("Show Border")]
        [Order(18)]
        public bool ShowBorder = true;

        [Checkbox("Instant GCDs only", spacing = true)]
        [Order(19)]
        public bool InstantGCDsOnly = false;

        [Checkbox("Only show when under GCD Threshold", spacing = true)]
        [Order(20)]
        public bool LimitGCDThreshold = false;

        [DragFloat("GCD Threshold", velocity = 0.01f)]
        [Order(21, collapseWith = nameof(LimitGCDThreshold))]
        public float GCDThreshold = 1.50f;

        [Checkbox("Show GCD Queue Indicator", spacing = true)]
        [Order(24)]
        public bool ShowGCDQueueIndicator = true;

        [ColorEdit4("GCD Queue Color")]
        [Order(25, collapseWith = nameof(ShowGCDQueueIndicator))]
        public PluginConfigColor QueueColor = new PluginConfigColor(new(13f / 255f, 207f / 255f, 31f / 255f, 100f / 100f));

        [DragInt("Radius")]
        [Order(35)]
        public int CircleRadius = 40;

        [DragInt("Thickness")]
        [Order(40)]
        public int CircleThickness = 10;

        [DragInt("Start Angle", min = 0, max = 359)]
        [Order(45)]
        public int CircleStartAngle = 0;

        [Checkbox("Rotate CCW")]
        [Order(50)]
        public bool RotateCCW = false;

        [DragInt2("Cursor Center Offset", min = -64, max = 64)]
        [Order(55)]
        public Vector2 CursorCenterOffset = new Vector2(8, 16);

        [NestedConfig("Visibility", 70)]
        public VisibilityConfig VisibilityConfig = new VisibilityConfig();

        public new static MouseGCDIndicatorConfig DefaultConfig() { return new MouseGCDIndicatorConfig() { Enabled = false, Strata = StrataLevel.MID_HIGH }; }
    }
}
