using System.Windows.Forms;
namespace RemSound.Core;
public sealed record HotkeyInfo(Keys Key, bool Control, bool Shift, bool Alt)
{
public static HotkeyInfo Default { get; } = new(Keys.M, true, true, true);
/// Sentinel for "no hotkey assigned". Used by features that want a global hotkey
/// to be opt-in rather than always-on (volume up/down, etc.). The hotkey controller skips
/// registration silently when a hotkey is unset.
public static HotkeyInfo Unset { get; } = new(Keys.None, false, false, false);
public bool IsUnset => Key == Keys.None && !Control && !Shift && !Alt;
public bool IsValid =>
(Control || Shift || Alt) &&
Key is not Keys.None and not Keys.ControlKey and not Keys.ShiftKey and not Keys.Menu;
public override string ToString()
{
if (IsUnset) return "(not set)";
var parts = new List(4);
if (Control) parts.Add("Control");
if (Shift) parts.Add("Shift");
if (Alt) parts.Add("Alt");
parts.Add(Key.ToString());
return string.Join("+", parts);
}
}