// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace System.Windows.Forms.Design;

[AttributeUsage(AttributeTargets.Class)]
public sealed class ToolStripItemDesignerAvailabilityAttribute : Attribute
{
    public static readonly ToolStripItemDesignerAvailabilityAttribute Default = new();

    /// <summary>
    ///  Specifies which ToolStrip types the Item can appear in - ToolStrip,MenuStrip,StatusStrip,ContextMenuStrip
    ///  Adding this attribute over a class lets you add to the list of custom items in the ToolStrip design time.
    /// </summary>
    public ToolStripItemDesignerAvailabilityAttribute()
    {
    }

    public ToolStripItemDesignerAvailabilityAttribute(ToolStripItemDesignerAvailability visibility)
    {
        ItemAdditionVisibility = visibility;
    }

    public ToolStripItemDesignerAvailability ItemAdditionVisibility { get; } = ToolStripItemDesignerAvailability.None;

    public override bool Equals(object? obj)
    {
        if (obj == this)
        {
            return true;
        }

        return obj is ToolStripItemDesignerAvailabilityAttribute other && other.ItemAdditionVisibility == ItemAdditionVisibility;
    }

    public override int GetHashCode() => ItemAdditionVisibility.GetHashCode();

    public override bool IsDefaultAttribute() => Equals(Default);
}
